diff --git a/config/config.example.yaml b/config/config.example.yaml index 9805425a2..e9e804e87 100644 --- a/config/config.example.yaml +++ b/config/config.example.yaml @@ -536,3 +536,10 @@ providers: # input_per_mtok: 0 # output_per_mtok: 0 # - Gemma4-31B + +# Extensions are absent by default. Add a named section only when a custom +# distribution requires it. Core preserves these values without depending on +# the extension's schema; the owning extension strictly validates its section. +# extensions: +# example: +# enabled: true diff --git a/config/config.go b/config/config.go index 865ebc9a1..5738c8477 100644 --- a/config/config.go +++ b/config/config.go @@ -39,6 +39,11 @@ type Config struct { Session SessionConfig `yaml:"session"` MCP MCPConfig `yaml:"mcp"` + // Extensions holds configuration owned by custom distributions. Core keeps + // the values opaque; an extension decodes its named section with + // LoadResult.DecodeExtension. + Extensions map[string]yaml.Node `yaml:"extensions,omitempty"` + // VirtualModels declares redirects, load balancers, and access policies as // infrastructure-as-code. They override admin-store rows of the same source. VirtualModels []VirtualModelConfig `yaml:"virtual_models"` @@ -52,6 +57,30 @@ type LoadResult struct { RawProviders map[string]RawProviderConfig } +// DecodeExtension strictly decodes one named extensions: section into target. +// It returns false when the section is absent. Core deliberately does not know +// any extension's schema, while each extension still gets unknown-key safety. +func (r *LoadResult) DecodeExtension(name string, target any) (bool, error) { + if r == nil || r.Config == nil || target == nil { + return false, nil + } + name = strings.TrimSpace(name) + node, ok := r.Config.Extensions[name] + if !ok { + return false, nil + } + data, err := yaml.Marshal(&node) + if err != nil { + return false, fmt.Errorf("encode extensions.%s: %w", name, err) + } + decoder := yaml.NewDecoder(strings.NewReader(string(data))) + decoder.KnownFields(true) + if err := decoder.Decode(target); err != nil { + return false, fmt.Errorf("decode extensions.%s: %w", name, err) + } + return true, nil +} + // buildDefaultConfig returns the single source of truth for all configuration defaults. func buildDefaultConfig() *Config { return &Config{ diff --git a/config/config_test.go b/config/config_test.go index b062d55dc..6dce267c4 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -256,6 +256,75 @@ func TestBuildDefaultConfig(t *testing.T) { } } +func TestDecodeExtensionStrictlyDecodesOpaqueConfig(t *testing.T) { + var node yaml.Node + if err := yaml.Unmarshal([]byte("enabled: true\npkce_enabled: false\n"), &node); err != nil { + t.Fatal(err) + } + type ssoConfig struct { + Enabled bool `yaml:"enabled"` + PKCEEnabled bool `yaml:"pkce_enabled"` + } + result := &LoadResult{Config: &Config{Extensions: map[string]yaml.Node{"sso": node}}} + var got ssoConfig + found, err := result.DecodeExtension("sso", &got) + if err != nil { + t.Fatal(err) + } + if !found || !got.Enabled || got.PKCEEnabled { + t.Fatalf("found=%v config=%+v", found, got) + } + + var unknown yaml.Node + if err := yaml.Unmarshal([]byte("unknown: true\n"), &unknown); err != nil { + t.Fatal(err) + } + result.Config.Extensions["sso"] = unknown + if _, err := result.DecodeExtension("sso", &got); err == nil { + t.Fatal("expected extension-owned unknown key to be rejected") + } +} + +func TestDecodeExtensionHandlesAbsentConfiguration(t *testing.T) { + var nilResult *LoadResult + if found, err := nilResult.DecodeExtension("sso", &struct{}{}); err != nil || found { + t.Fatalf("nil result: found=%v err=%v", found, err) + } + result := &LoadResult{Config: &Config{}} + if found, err := result.DecodeExtension("sso", &struct{}{}); err != nil || found { + t.Fatalf("missing extension: found=%v err=%v", found, err) + } + if found, err := result.DecodeExtension("sso", nil); err != nil || found { + t.Fatalf("nil target: found=%v err=%v", found, err) + } +} + +func TestLoadPreservesOpaqueExtensionConfiguration(t *testing.T) { + clearAllConfigEnvVars(t) + withTempDir(t, func(dir string) { + contents := []byte("extensions:\n sso:\n enabled: true\n provider_specific_option: value\n") + if err := os.WriteFile(filepath.Join(dir, "config.yaml"), contents, 0o644); err != nil { + t.Fatal(err) + } + + result, err := Load() + if err != nil { + t.Fatalf("Load() rejected extension-owned keys: %v", err) + } + var decoded struct { + Enabled bool `yaml:"enabled"` + ProviderSpecificOption string `yaml:"provider_specific_option"` + } + found, err := result.DecodeExtension("sso", &decoded) + if err != nil { + t.Fatal(err) + } + if !found || !decoded.Enabled || decoded.ProviderSpecificOption != "value" { + t.Fatalf("found=%v config=%+v", found, decoded) + } + }) +} + func TestLoadBudgetEnvUserPath(t *testing.T) { clearAllConfigEnvVars(t) diff --git a/ext/auth.go b/ext/auth.go new file mode 100644 index 000000000..5f9f7e63c --- /dev/null +++ b/ext/auth.go @@ -0,0 +1,102 @@ +package ext + +import ( + "context" + "net/http" + "slices" + "time" +) + +type authenticationContextKey struct{} +type clearedAuthentication struct{} + +// Provider-neutral response headers let the bundled dashboard discover an +// extension-managed browser authentication flow without knowing whether the +// provider uses OIDC, SAML, or another protocol. Values are app-local paths. +const ( + AuthenticationLoginHeader = "X-GoModel-Auth-Login" + AuthenticationLogoutHeader = "X-GoModel-Auth-Logout" + AuthenticationUserHeader = "X-GoModel-Auth-User" +) + +// Authentication describes an identity established by an extension. +// PrincipalID must be a stable, non-secret identifier within the +// authenticator's namespace. UserPath is the existing GoModel authorization +// and accounting subject; it is deliberately separate because a login identity +// and a policy hierarchy are not the same thing. +type Authentication struct { + PrincipalID string + UserPath string + Labels []string + DashboardAccess bool + // Method is a short, stable audit identifier such as "oidc" or "saml". + // Core normalizes safe identifiers and records "extension" when it is empty + // or invalid. + Method string +} + +// RequestAuthenticator authenticates requests using a mechanism other than +// the core bearer-token authenticators (for example an OIDC browser session). +// A nil result with a nil error means the mechanism does not apply to the +// request. Implementations must be safe for concurrent use. +type RequestAuthenticator interface { + Name() string + AuthenticateRequest(ctx context.Context, request *http.Request) (*Authentication, error) +} + +// AuthenticationEvent is a security-audit record emitted by an extension +// authentication flow. Reason must be a short, stable machine identifier; it +// must not contain provider responses, tokens, claims, or other secrets. +type AuthenticationEvent struct { + Timestamp time.Time + Type string + Outcome string + Method string + PrincipalID string + UserPath string + RequestID string + ClientIP string + HTTPMethod string + Path string + UserAgent string + Reason string +} + +// AuthenticationEventRecorder persists authentication lifecycle events in +// Core's audit trail. Implementations must be safe for concurrent use and +// must not block the authentication flow on durable storage I/O. +type AuthenticationEventRecorder interface { + RecordAuthenticationEvent(AuthenticationEvent) +} + +// AuthenticationEventRecorderAware is optionally implemented by a request +// authenticator that emits login, rejection, and logout lifecycle events. +// Core installs the recorder after its audit subsystem has initialized. +type AuthenticationEventRecorderAware interface { + SetAuthenticationEventRecorder(AuthenticationEventRecorder) +} + +// WithAuthentication attaches an extension-established identity to a request +// context. Core calls this after accepting an authenticator result. +func WithAuthentication(ctx context.Context, authentication Authentication) context.Context { + authentication.Labels = slices.Clone(authentication.Labels) + return context.WithValue(ctx, authenticationContextKey{}, authentication) +} + +// WithoutAuthentication returns a context that hides any extension identity +// inherited from an outer middleware. Core uses it at the explicit-credential +// boundary so a bearer token cannot retain an ambient cookie principal. +func WithoutAuthentication(ctx context.Context) context.Context { + return context.WithValue(ctx, authenticationContextKey{}, clearedAuthentication{}) +} + +// AuthenticationFromContext returns the extension-established identity, if +// the request was authenticated by an extension. +func AuthenticationFromContext(ctx context.Context) (Authentication, bool) { + if ctx == nil { + return Authentication{}, false + } + authentication, ok := ctx.Value(authenticationContextKey{}).(Authentication) + authentication.Labels = slices.Clone(authentication.Labels) + return authentication, ok +} diff --git a/ext/auth_test.go b/ext/auth_test.go new file mode 100644 index 000000000..69bc038a8 --- /dev/null +++ b/ext/auth_test.go @@ -0,0 +1,53 @@ +package ext + +import ( + "context" + "testing" +) + +func TestAuthenticationContextRoundTripClonesLabels(t *testing.T) { + authentication := Authentication{ + PrincipalID: "oidc:principal-1", + UserPath: "/users/one", + Labels: []string{"team-a"}, + Method: "oidc", + } + ctx := WithAuthentication(t.Context(), authentication) + authentication.Labels[0] = "mutated-source" + + got, ok := AuthenticationFromContext(ctx) + if !ok { + t.Fatal("authentication missing from context") + } + if got.PrincipalID != "oidc:principal-1" || got.Labels[0] != "team-a" { + t.Fatalf("authentication = %+v", got) + } + got.Labels[0] = "mutated-result" + + again, ok := AuthenticationFromContext(ctx) + if !ok || again.Labels[0] != "team-a" { + t.Fatalf("stored authentication was mutated: %+v", again) + } +} + +func TestWithoutAuthenticationHidesInheritedIdentity(t *testing.T) { + ctx := WithAuthentication(t.Context(), Authentication{ + PrincipalID: "oidc:ambient", + UserPath: "/users/ambient", + Labels: []string{"sso"}, + }) + ctx = WithoutAuthentication(ctx) + + if authentication, ok := AuthenticationFromContext(ctx); ok { + t.Fatalf("AuthenticationFromContext() = %+v, true; want no identity", authentication) + } +} + +func TestAuthenticationFromContextHandlesMissingContext(t *testing.T) { + if _, ok := AuthenticationFromContext(nil); ok { //nolint:staticcheck // Exercise the helper's defensive nil-context branch. + t.Fatal("nil context returned an authentication") + } + if _, ok := AuthenticationFromContext(context.Background()); ok { + t.Fatal("empty context returned an authentication") + } +} diff --git a/ext/registry.go b/ext/registry.go index ec91f8a13..67af0b7dc 100644 --- a/ext/registry.go +++ b/ext/registry.go @@ -11,13 +11,22 @@ import ( // Register everything before the server is constructed (before run.Run or // app.New); core snapshots each registration list during initialization. type Registry struct { - mu sync.Mutex - rewriters []RequestRewriter - middleware []echo.MiddlewareFunc - routes []func(*echo.Echo) - publicPaths []string - routeSelector RouteSelector - settings []RuntimeSetting + mu sync.Mutex + rewriters []RequestRewriter + middleware []echo.MiddlewareFunc + routes []func(*echo.Echo) + publicPaths []string + routeSelector RouteSelector + settings []RuntimeSetting + authenticators []RequestAuthenticator +} + +// RegisterAuthenticator adds a request authentication mechanism. Core bearer +// tokens keep precedence when a request explicitly supplies one. +func (r *Registry) RegisterAuthenticator(authenticator RequestAuthenticator) { + r.mu.Lock() + defer r.mu.Unlock() + r.authenticators = append(r.authenticators, authenticator) } // RegisterSetting adds a deployment-wide setting exposed through the generic @@ -112,6 +121,13 @@ func (r *Registry) Settings() []RuntimeSetting { return slices.Clone(r.settings) } +// Authenticators returns a defensive copy of registered request authenticators. +func (r *Registry) Authenticators() []RequestAuthenticator { + r.mu.Lock() + defer r.mu.Unlock() + return slices.Clone(r.authenticators) +} + // Default is the process-wide registry used by package-level helpers and, by // default, by run.Run. var Default = &Registry{} @@ -133,3 +149,8 @@ func RegisterRouteSelector(sel RouteSelector) { Default.RegisterRouteSelector(se // RegisterSetting registers a runtime setting on the Default registry. func RegisterSetting(setting RuntimeSetting) { Default.RegisterSetting(setting) } + +// RegisterAuthenticator registers a request authenticator on the Default registry. +func RegisterAuthenticator(authenticator RequestAuthenticator) { + Default.RegisterAuthenticator(authenticator) +} diff --git a/ext/registry_test.go b/ext/registry_test.go index b687940c3..e175dbef4 100644 --- a/ext/registry_test.go +++ b/ext/registry_test.go @@ -2,6 +2,7 @@ package ext import ( "context" + "net/http" "sync" "testing" @@ -12,6 +13,14 @@ import ( type namedRewriter struct{ name string } +type namedAuthenticator struct{ name string } + +func (a *namedAuthenticator) Name() string { return a.name } + +func (a *namedAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*Authentication, error) { + return nil, nil +} + type testRuntimeSetting struct{ value string } func (s *testRuntimeSetting) Descriptor() SettingDescriptor { @@ -69,6 +78,17 @@ func TestRegistryCollectsMiddlewareAndRoutes(t *testing.T) { assert.Len(t, reg.Routes(), 1) } +func TestRegistryCollectsRequestAuthenticators(t *testing.T) { + reg := &Registry{} + reg.RegisterAuthenticator(&namedAuthenticator{name: "oidc"}) + + snapshot := reg.Authenticators() + require.Len(t, snapshot, 1) + assert.Equal(t, "oidc", snapshot[0].Name()) + reg.RegisterAuthenticator(&namedAuthenticator{name: "other"}) + assert.Len(t, snapshot, 1, "earlier snapshot must not grow") +} + func TestRegistryCollectsRuntimeSettings(t *testing.T) { reg := &Registry{} reg.RegisterSetting(&testRuntimeSetting{value: "high"}) diff --git a/internal/admin/dashboard/static/dist/assets/index-D7DzAhDp.js b/internal/admin/dashboard/static/dist/assets/index-D7DzAhDp.js deleted file mode 100644 index 89323bbe5..000000000 --- a/internal/admin/dashboard/static/dist/assets/index-D7DzAhDp.js +++ /dev/null @@ -1,68 +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{}}function Ea(e){let t=Number(e);return Number.isFinite(t)?Math.min(240,Math.max(60,Math.round(t))):240}function Da(e,t,n){return Ea(Number(e)+Number(n)-Number(t))}var Oa=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)}},ka=new class{#e=k(j(240));get width(){return I(this.#e)}set width(e){A(this.#e,e,!0)}get collapsed(){return this.width===60}init(){let e=wa(`gomodel_sidebar_width`),t=wa(`gomodel_sidebar_collapsed`)===`true`;this.setWidth(e??(t?60:240))}toggle(){this.setWidth(this.collapsed?240:60,!0)}setWidth(e,t=!1){this.width=Ea(e),typeof document<`u`&&document.documentElement.style.setProperty(`--sidebar-width`,`${this.width}px`),t&&(Ta(`gomodel_sidebar_width`,this.width),Ta(`gomodel_sidebar_collapsed`,this.collapsed))}},Aa=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}},ja=[[`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`}]],Ma=[[`path`,{d:`M12 5v14`}],[`path`,{d:`m19 12-7 7-7-7`}]],Na=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],Pa=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Fa=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]],Ia=[[`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`}]],La=[[`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`}]],Ra=[[`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`}]],za=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],Ba=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],Va=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],Ha=[[`path`,{d:`M20 6 9 17l-5-5`}]],Ua=[[`path`,{d:`m6 9 6 6 6-6`}]],Wa=[[`path`,{d:`m15 18-6-6 6-6`}]],Ga=[[`path`,{d:`m9 18 6-6-6-6`}]],Ka=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],qa=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],Ja=[[`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`}]],Ya=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Xa=[[`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`}]],Za=[[`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`}]],$a=[[`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`}]],eo=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],to=[[`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`}]],no=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],ro=[[`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`}]],io=[[`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`}]],ao=[[`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`}]],oo=[[`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`}]],so=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],co=[[`path`,{d:`m14 10 7-7`}],[`path`,{d:`M20 10h-6V4`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M4 14h6v6`}]],lo=[[`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`}]],uo=[[`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`}]],fo=[[`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`}]],po=[[`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`}]],mo=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],ho=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],go=[[`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`}]],_o=[[`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`}]],vo=[[`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`}]],yo=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],bo=[[`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`}]],xo=[[`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`}]],So=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],Co=[[`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`}]],wo=[[`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`}]],To=[[`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`}]],Eo=[[`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`}]],Do=[[`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`}]],Oo=[[`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`}]],ko=[[`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`}]],Ao=[[`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`}]],jo=[[`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`}]],Mo=[[`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`}]],No=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],Po=[[`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`}]],Fo=[[`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`}]],Io=[[`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`}]],Lo=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],Ro=R(``),zo=R(`
`,1);function Bo(e,t){E(t,!0);let n=G(t,`compact`,3,!1),r=[{value:`light`,icon:Oo,label:`Light theme`},{value:`system`,icon:lo,label:`System theme`},{value:`dark`,icon:uo,label:`Dark theme`}],i=O(()=>r.find(e=>e.value===Oa.theme)||r[1]),a=O(()=>`Change theme (currently `+I(i).label+`)`);var o=zo(),s=N(o);let c;H(s,21,()=>r,e=>e.value,(e,t)=>{var n=Ro();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:Oa.theme===I(t).value}),W(n,`aria-pressed`,Oa.theme===I(t).value),W(n,`title`,I(t).label),W(n,`aria-label`,I(t).label)}),L(`click`,n,()=>Oa.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,()=>Oa.toggle()),z(e,o),D()}Hr([`click`]);function Vo(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Ho(e){let t=Vo();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Uo(e){let t=Vo();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function Wo(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function Go(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var Ko=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function qo(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function Jo(e){let t=qo(Uo(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=Ko.includes(n)?n:`overview`,{page:n,sub:r})}var Yo=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}=Jo(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=Jo(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Ho(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Xo=`gomodel_api_key`;function Zo(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=Zo(localStorage.getItem(Xo)||``)}catch{this.apiKey=``}}hasApiKey(){return Zo(this.apiKey)!==``}save(){this.apiKey=Zo(this.apiKey);try{localStorage.setItem(Xo,this.apiKey)}catch{}}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=Zo(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=cs(`en-CA`,{timeZone:ls(t)?t:is,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 $o(e)}dateToDateKey(e){return es(e)}addDaysToDateKey(e,t){return ts(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=ls(e)?e:is;try{let e=cs(`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=[]}[is,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&ls(e)&&t.push(e)}),t=t.filter(e=>ls(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&&ls(this.override))try{e.setItem(as,this.override)}catch{}else{try{e.removeItem(as)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=Ca();if(e)try{e.removeItem(as)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function ps(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function ms(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 hs(){let e={"Content-Type":`application/json`},t=Zo(q.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=fs.effectiveTimezone(),e}function gs(e,t={}){return fetch(Ho(e),{...t,headers:{...hs(),...t.headers||{}}})}async function _s(e,t,{label:n=e,parse:r=!0}={}){let i=q.generation,a=await gs(e,t);if(a.status===401)return q.handleUnauthorized(i),{ok:!1,stale:ie.trim()).filter(Boolean);return e.length>0?e:Ss}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 vs(`/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 xs)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)}}},ws=[{page:`overview`,label:`Overview`,icon:io},{page:`providers-config`,label:`Providers`,icon:bo},{page:`models`,label:`Models`,icon:Ia},{page:`audit-logs`,label:`Audit Logs`,icon:to},{page:`usage`,label:`Usage`,icon:Va},{page:`budgets`,label:`Budgets`,icon:Po,visible:()=>Cs.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:eo,visible:()=>Cs.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:ro},{page:`workflows`,label:`Workflows`,icon:Io},{page:`guardrails`,label:`Guardrails (experimental)`,icon:wo,visible:()=>Cs.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:po,visible:()=>Cs.mcpVisible()},{page:`settings`,label:`Settings`,icon:Co}],Ts=R(` `),Es=R(`
`),Ds=R(` `,1);function Os(e,t){E(t,!0);let n=O(()=>ws.filter(e=>!e.visible||e.visible())),r=k(null),i=0,a=0,o=!1;function s(e){e.button===0&&(e.preventDefault(),A(r,e.pointerId,!0),i=e.clientX,a=ka.width,o=!1,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`sidebar-resizing`))}function c(e){e.pointerId===I(r)&&(!o&&Math.abs(e.clientX-i)<=4||(o=!0,ka.setWidth(Da(a,i,e.clientX))))}function l(e){I(r)===null||e.pointerId!==void 0&&e.pointerId!==I(r)||(A(r,null),document.body.classList.remove(`sidebar-resizing`),ka.setWidth(ka.width,!0))}function u(){if(o){o=!1;return}ka.toggle()}function d(e){let t;if(e.key===`ArrowLeft`)t=ka.width-12;else if(e.key===`ArrowRight`)t=ka.width+12;else if(e.key===`Home`)t=60;else if(e.key===`End`)t=240;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),ka.toggle();return}else return;e.preventDefault(),ka.setWidth(t,!0)}var f=Ds(),p=N(f);let m;var h=M(p),g=M(h);Sa(M(g),{}),T(g),Ue(4),T(h);var _=P(h,2);H(_,21,()=>I(n),e=>e.page,(e,t)=>{var n=Ts();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:Yo.page===I(t).page}),W(n,`title`,I(t).label),B(o,I(t).label)},[()=>Ho(`/admin/dashboard/`+I(t).page)]),L(`click`,n,e=>{e.preventDefault(),Yo.navigate(I(t).page)}),z(e,n)}),T(_);var v=P(_,2),y=M(v);Bo(y,{get compact(){return ka.collapsed}});var b=P(y,2),x=e=>{var t=Es(),n=M(t),r=M(n);K(r,{get icon(){return oo},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)},S=O(()=>q.needsAuth||q.hasApiKey());V(b,e=>{I(S)&&e(x)}),T(v),T(p);var C=P(p,2);F(()=>{m=U(p,1,`sidebar svelte-1nwtzae`,null,m,{"sidebar-collapsed":ka.collapsed,"sidebar-resizing":I(r)!==null}),W(C,`aria-valuemin`,60),W(C,`aria-valuemax`,240),W(C,`aria-valuenow`,ka.width)}),L(`pointerdown`,C,s),L(`pointermove`,C,c),L(`pointerup`,C,l),Vr(`pointercancel`,C,l),Vr(`lostpointercapture`,C,l),L(`keydown`,C,d),L(`click`,C,u),z(e,f),D()}Hr([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`]);var ks=R(``);function As(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=ks();K(M(s),{get icon(){return Lo},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 js(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 Ms(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var Ns=R(`
`,1);function Ps(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(()=>Aa.opened()),r=n=>{n.key===`Escape`&&Aa.isTop(e)&&t.onclose?.()};return window.addEventListener(`keydown`,r),()=>{Aa.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=Ns(),r=N(n),i=P(r,2);gi(M(i),()=>t.children??f),T(i),Mi(i,Ms),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 Fs=R(``),Is=R(``);function Ls(e,t){E(t,!0),Ps(e,{get open(){return q.dialogOpen},variant:`auth`,onclose:()=>q.closeDialog(),children:(e,t)=>{var n=Is(),r=M(n),i=M(r),a=M(i),o=M(a,!0);T(a),T(i),As(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 oo},class:`auth-dialog-input-icon`});var u=P(l,2);na(u),T(c);var d=P(c,2),f=e=>{var t=Fs(),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 Ha},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 Rs(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:Mo,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var zs=new class{#e=k(j(Rs()));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={...Rs(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Rs(),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}}}},Bs=R(`

`),Vs=R(``),Hs=R(`

`);function Us(e,t){E(t,!0);let n=O(()=>zs.state);Ps(e,{get open(){return I(n).open},variant:`auth`,onclose:()=>zs.close(),children:(e,t)=>{var r=Hs(),i=M(r),a=M(i),o=M(a,!0);T(a),As(P(a,2),{label:`Close confirmation dialog`,onclick:()=>zs.close(),class:`auth-dialog-close`,iconClass:``}),T(i);var s=P(i,2),c=M(s),l=e=>{var t=Bs(),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=Vs(),n=M(t,!0);T(t),F(()=>B(n,zs.error)),z(e,t)};V(m,e=>{zs.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)},[()=>zs.inputLabel(),()=>I(n).loading||!zs.ready()]),Vr(`submit`,s,e=>{e.preventDefault(),zs.submit()}),da(p,()=>zs.state.value,e=>zs.state.value=e),L(`click`,_,()=>zs.close()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var Ws=e=>e;function Gs(e){let t=e-1;return t*t*t+1}function Ks(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function qs(e,{delay:t=0,duration:n=400,easing:r=Ws}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function Js(e,{delay:t=0,duration:n=400,easing:r=Gs,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]=Ks(i),[p,m]=Ks(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 Ys(e,{delay:t=0,duration:n=400,easing:r=Gs,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 Xs(e){return--e*e*(2.70158*e+1.70158)+1}function Zs(e){let t=e-1;return t*t*t+1}var Qs=5e3,$s=8e3,J=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,$s)}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))}},ec=R(`
`),tc=R(`
`);function nc(e,t){E(t,!0);var n=tc();H(n,21,()=>J.toasts,e=>e.id,(e,t)=>{var n=ec();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,()=>J.dismiss(I(t).id)),ki(1,n,()=>Js,()=>({y:-24,duration:360,easing:Xs})),ki(2,n,()=>qs,()=>({duration:150})),z(e,n)}),T(n),z(e,n),D()}Hr([`click`]);var rc=R(``);function ic(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{z(e,rc())},a=O(()=>Go());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}function ac(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function oc(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 sc(e){return e==null||e===void 0?`-`:e.toLocaleString()}function cc(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 lc(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function uc(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function dc(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 fc(e,t){let n=t==null||t===``?NaN:Number(t),r=Number.isFinite(n)?sc(n):`-`;return String(e||`Tokens`)+`: `+r}function pc(e){return e?typeof e==`string`?e:e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`):``}function mc(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 hc(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 gc(e){return String(e&&e.provider||``).trim()}function _c(e){return String(e&&e.provider_name||``).trim()||gc(e)}function vc(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=_c(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function yc(e){return vc(e,e&&e.model)}function bc(e){return vc(e,e&&e.resolved_model)}function xc(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=bc(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var Sc=`gomodel_date_range`,Cc=1;function wc(e){return/^[1-9]\d*$/.test(String(e??``))}var Tc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Ec({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&wc(e)?{v:Cc,mode:`preset`,days:String(e)}:e?null:ns(t)&&ns(n)?{v:Cc,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Dc(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`?wc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&ns(t.start)&&ns(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Oc(e,t,n){let r=rs(e,t);return r<1||!ns(n)?{start:e,end:t}:{start:ts(n,-(r-1)),end:n}}function kc(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return Tc[Number(r)-1]+` `+Number(i)+`, `+n}function Ac({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!ns(t)||!ns(n))return``;let a=rs(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function jc({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>kc(e,r);return ns(t)&&ns(n)?t===n?i(t):i(t)+` – `+i(n):ns(t)?i(t)+` – ...`:`Last 30 days`}var Mc=6e4,Nc=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(),Mc)}queryStr(){return this.customStartDate&&this.customEndDate?`start_date=`+pc(this.customStartDate)+`&end_date=`+pc(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))}},Fc=R(``);function Ic(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Fc(),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 Lc(){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 Rc(){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 zc=new class{#e=k(j(Lc()));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(Rc()));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 Cs.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Nc.queryStr()+`&interval=`+Nc.interval,[n,r]=await Promise.all([vs(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),vs(`/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=Lc(),this.daily=[],this.cacheOverview=Rc();return}this.summary=n.data||Lc(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(bs(e))return;console.error(`Failed to fetch usage:`,e),this.summary=Lc(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await Cs.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Rc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await vs(`/admin/cache/overview?`+(Nc.queryStr()+`&interval=`+Nc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Rc();return}let r=n.data&&typeof n.data==`object`?n.data:Rc();r.summary||=Rc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(bs(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Rc()}finally{this.#a===t&&(this.#a=null)}}},Bc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Vc(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return Bc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Hc(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 Uc(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function Wc(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var Gc=R(``),Kc=R(``),qc=R(``),Jc=R(`
MoTuWeThFrSaSu
`);function Yc(e,t){E(t,!0);let n=G(t,`offset`,3,0),r=O(()=>Hc(t.calendarMonth,n(),e=>fs.dateToDateKey(e))),i=O(()=>Wc(t.calendarMonth,fs.todayDate())),a=e=>fs.dateToDateKey(e.date),o=e=>a(e)>fs.currentDateKey(),s=e=>e.current&&a(e)===fs.currentDateKey();function c(e,t){let n=t===`start`?Nc.rangeStart():Nc.rangeEnd();return e.current&&!!n&&a(e)===fs.dateToDateKey(n)}function l(e){let t=Nc.rangeStart(),n=Nc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=fs.dateToDateKey(t)&&a(e)<=fs.dateToDateKey(n)}var u=Jc(),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,Gc())},v=e=>{var n=Kc();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=qc(),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)},[()=>Vc(t.calendarMonth,n())]),L(`click`,f,function(...e){t.onprev?.apply(this,e)}),z(e,u),D()}Hr([`click`]);var Xc=R(``),Zc=R(`
`),Qc=Xr(``),$c=Xr(``),el=R(`
`),tl=R(`
`);function nl(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)&&(Nc.syncToToday(),A(a,fs.startOfMonthDate(Nc.customEndDate||fs.todayDate()),!0),A(i,`start`))}function c(){A(r,!1),A(o,{show:!1,x:0,y:0},!0)}let l=Nc.syncTick;An(()=>{let e=Nc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Nc.selectPreset(e),A(i,`start`),t.onchange?.(),c()}let d=()=>A(a,Uc(I(a),-1),!0),f=()=>A(a,Uc(I(a),1,fs.startOfMonthDate(fs.todayDate())),!0);function p(e){let n=new Date(e.date);if(I(i)===`start`){Nc.selectStart(n),A(i,`end`),t.onchange?.();return}Nc.selectEnd(n),A(i,`start`),t.onchange?.(),c()}var m=tl(),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=Zc(),r=M(t);H(r,20,()=>n,e=>e,(e,t)=>{var n=Xc();let r;var i=M(n);T(n),F(()=>{r=U(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Nc.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)=>{Yc(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=el(),n=M(t),r=e=>{z(e,Qc())},a=e=>{z(e,$c())};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)?js(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)})},[()=>Nc.dateRangeSpanLabel(),()=>Nc.dateRangeLabel()]),L(`click`,h,s),z(e,m),D()}Hr([`click`,`mousemove`]);function rl(e){return e+.5|0}var il=(e,t,n)=>Math.max(Math.min(e,n),t);function al(e){return il(rl(e*2.55),0,255)}function ol(e){return il(rl(e*255),0,255)}function sl(e){return il(rl(e/2.55)/100,0,1)}function cl(e){return il(rl(e*100),0,100)}var ll={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},ul=[...`0123456789ABCDEF`],dl=e=>ul[e&15],fl=e=>ul[(e&240)>>4]+ul[e&15],pl=e=>(e&240)>>4==(e&15),ml=e=>pl(e.r)&&pl(e.g)&&pl(e.b)&&pl(e.a);function hl(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&ll[e[1]]*17,g:255&ll[e[2]]*17,b:255&ll[e[3]]*17,a:t===5?ll[e[4]]*17:255}:(t===7||t===9)&&(n={r:ll[e[1]]<<4|ll[e[2]],g:ll[e[3]]<<4|ll[e[4]],b:ll[e[5]]<<4|ll[e[6]],a:t===9?ll[e[7]]<<4|ll[e[8]]:255})),n}var gl=(e,t)=>e<255?t(e):``;function _l(e){var t=ml(e)?dl:fl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+gl(e.a,t):void 0}var vl=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function yl(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 bl(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 xl(e,t,n){let r=yl(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 Sl(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=Sl(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function wl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(ol)}function Tl(e,t,n){return wl(yl,e,t,n)}function El(e,t,n){return wl(xl,e,t,n)}function Dl(e,t,n){return wl(bl,e,t,n)}function Ol(e){return(e%360+360)%360}function kl(e){let t=vl.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?al(+t[5]):ol(+t[5]));let i=Ol(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?El(i,a,o):t[1]===`hsv`?Dl(i,a,o):Tl(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function Al(e,t){var n=Cl(e);n[0]=Ol(n[0]+t),n=Tl(n),e.r=n[0],e.g=n[1],e.b=n[2]}function jl(e){if(!e)return;let t=Cl(e),n=t[0],r=cl(t[1]),i=cl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${sl(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var Ml={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`},Nl={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 Pl(){let e={},t=Object.keys(Nl),n=Object.keys(Ml),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Fl;function Il(e){Fl||(Fl=Pl(),Fl.transparent=[0,0,0,0]);let t=Fl[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var Ll=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Rl(e){let t=Ll.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?al(e):il(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?al(r):il(r,0,255)),i=255&(t[4]?al(i):il(i,0,255)),a=255&(t[6]?al(a):il(a,0,255)),{r,g:i,b:a,a:n}}}function zl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${sl(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var Bl=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Vl=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Hl(e,t,n){let r=Vl(sl(e.r)),i=Vl(sl(e.g)),a=Vl(sl(e.b));return{r:ol(Bl(r+n*(Vl(sl(t.r))-r))),g:ol(Bl(i+n*(Vl(sl(t.g))-i))),b:ol(Bl(a+n*(Vl(sl(t.b))-a))),a:e.a+n*(t.a-e.a)}}function Ul(e,t,n){if(e){let r=Cl(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=Tl(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function Wl(e,t){return e&&Object.assign(t||{},e)}function Gl(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=ol(e[3]))):(t=Wl(e,{r:0,g:0,b:0,a:1}),t.a=ol(t.a)),t}function Kl(e){return e.charAt(0)===`r`?Rl(e):kl(e)}var ql=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=Gl(t):n===`string`&&(r=hl(t)||Il(t)||Kl(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=Wl(this._rgb);return e&&(e.a=sl(e.a)),e}set rgb(e){this._rgb=Gl(e)}rgbString(){return this._valid?zl(this._rgb):void 0}hexString(){return this._valid?_l(this._rgb):void 0}hslString(){return this._valid?jl(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=Hl(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=ol(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=rl(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 Ul(this._rgb,2,e),this}darken(e){return Ul(this._rgb,2,-e),this}saturate(e){return Ul(this._rgb,1,e),this}desaturate(e){return Ul(this._rgb,1,-e),this}rotate(e){return Al(this._rgb,e),this}};function Jl(){}var Yl=(()=>{let e=0;return()=>e++})();function Xl(e){return e==null}function Zl(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 $l(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function eu(e,t){return $l(e)?e:t}function tu(e,t){return e===void 0?t:e}var nu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,ru=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function iu(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function au(e,t,n,r){let i,a,o;if(Zl(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 mu(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 hu(e){let t=mu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function gu(e,t){return(pu[t]||(pu[t]=hu(t)))(e)}function _u(e){return e.charAt(0).toUpperCase()+e.slice(1)}var vu=e=>e!==void 0,yu=e=>typeof e==`function`,bu=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function xu(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var Su=Math.PI,Cu=2*Su,wu=Cu+Su,Tu=1/0,Eu=Su/180,Du=Su/2,Ou=Su/4,ku=Su*2/3,Au=Math.log10,ju=Math.sign;function Mu(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Fu(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function Iu(e){return!Fu(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function Lu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Ru(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 Xu(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var Zu=(e,t,n,r)=>Xu(e,n,r?r=>{let i=e[r][t];return ie[r][t]Xu(e,n,r=>e[r][t]>=n);function $u(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+_u(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 nd(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)&&(ed.forEach(t=>{delete e[t]}),delete e._chartjs)}function rd(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var id=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function ad(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,id.call(window,()=>{r=!1,e.apply(t,n)}))}}function od(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var sd=e=>e===`start`?`left`:e===`end`?`right`:`center`,cd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,ld=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function ud(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(Zu(c,u,d).lo,n?r:Zu(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!Xl(e[s.axis]));i-=Math.max(0,e)}i=qu(i,0,r-1)}if(m){let e=Math.max(Zu(c,o.axis,f,!0).hi+1,n?0:Zu(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!Xl(e[s.axis]));e+=Math.max(0,t)}a=qu(e,i,r)-i}else a=r-i}return{start:i,count:a}}function dd(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 fd=e=>e===0||e===1,pd=(e,t,n)=>-(2**(10*--e)*Math.sin((e-t)*Cu/n)),md=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*Cu/n)+1,hd={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*Du)+1,easeOutSine:e=>Math.sin(e*Du),easeInOutSine:e=>-.5*(Math.cos(Su*e)-1),easeInExpo:e=>e===0?0:2**(10*(e-1)),easeOutExpo:e=>e===1?1:-(2**(-10*e))+1,easeInOutExpo:e=>fd(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=>fd(e)?e:pd(e,.075,.3),easeOutElastic:e=>fd(e)?e:md(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return fd(e)?e:e<.5?.5*pd(e*2,t,n):.5+.5*md(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-hd.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?hd.easeInBounce(e*2)*.5:hd.easeOutBounce(e*2-1)*.5+.5};function gd(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function _d(e){return gd(e)?e:new ql(e)}function vd(e){return gd(e)?e:new ql(e).saturate(.5).darken(.1).hexString()}var yd=[`x`,`y`,`borderWidth`,`radius`,`tension`],bd=[`color`,`borderColor`,`backgroundColor`];function xd(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:bd},numbers:{type:`number`,properties:yd}}),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 Sd(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Cd=new Map;function wd(e,t){t||={};let n=e+JSON.stringify(t),r=Cd.get(n);return r||(r=new Intl.NumberFormat(e,t),Cd.set(n,r)),r}function Td(e,t,n){return wd(t,n).format(e)}var Ed={values(e){return Zl(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=Dd(e,n)}let o=Au(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),Td(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(Au(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?Ed.numeric.call(this,e,t,n):``}};function Dd(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 Od={formatters:Ed};function kd(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:Od.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 Ad=Object.create(null),jd=Object.create(null);function Md(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)=>vd(t.backgroundColor),this.hoverBorderColor=(e,t)=>vd(t.borderColor),this.hoverColor=(e,t)=>vd(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 Nd(this,e,t)}get(e){return Md(this,e)}describe(e,t){return Nd(jd,e,t)}override(e,t){return Nd(Ad,e,t)}route(e,t,n,r){let i=Md(this,e),a=Md(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):tu(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}},[xd,Sd,kd]);function Fd(e){return!e||Xl(e.size)||Xl(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function Id(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 Ld(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 Hd(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,qd(e,a),c=0;c+e||0;function nf(e,t){let n={},r=Ql(t),i=r?Object.keys(t):t,a=Ql(e)?r?n=>tu(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=tf(a(e));return n}function rf(e){return nf(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function af(e){return nf(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function of(e){let t=rf(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function sf(e,t){e||={},t||=Pd.font;let n=tu(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=tu(e.style,t.style);r&&!(``+r).match($d)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:tu(e.family,t.family),lineHeight:ef(tu(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:tu(e.weight,t.weight),string:``};return i.string=Fd(i),i}function cf(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 uf(e,t){return Object.assign(Object.create(e),t)}function df(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Df(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>df([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return gf(n,r,()=>Ef(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Of(e).includes(t)},ownKeys(e){return Of(e)},set(e,t,n){let r=e._storage||=i();return e[t]=r[t]=n,delete e._keys,!0}})}function ff(e,t,n,r){let i={_cacheable:!1,_proxy:e,_context:t,_subProxy:n,_stack:new Set,_descriptors:pf(e,r),setContext:t=>ff(e,t,n,r),override:i=>ff(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 gf(e,t,()=>_f(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 pf(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:yu(n)?n:()=>n,isIndexable:yu(r)?r:()=>r}}var mf=(e,t)=>e?e+_u(t):t,hf=(e,t)=>Ql(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function gf(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function _f(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return yu(s)&&o.isScriptable(t)&&(s=vf(t,s,e,n)),Zl(s)&&s.length&&(s=yf(t,s,e,o.isIndexable)),hf(t,s)&&(s=ff(s,i,a&&a[t],o)),s}function vf(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),hf(e,c)&&(c=Cf(i._scopes,i,e,c)),c}function yf(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=Cf(r,i,e,c);t.push(ff(n,a,o&&o[e],s))}}return t}function bf(e,t,n){return yu(e)?e(t,n):e}var xf=(e,t)=>e===!0?t:typeof e==`string`?gu(t,e):void 0;function Sf(e,t,n,r,i){for(let a of t){let t=xf(n,a);if(t){e.add(t);let a=bf(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 Cf(e,t,n,r){let i=t._rootScopes,a=bf(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=wf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=wf(s,o,a,c,r),c===null)?!1:df(Array.from(s),[``],i,a,()=>Tf(t,n,r))}function wf(e,t,n,r,i){for(;n;)n=Sf(e,t,n,r,i);return n}function Tf(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return Zl(i)&&Ql(n)?n:i||{}}function Ef(e,t,n,r){let i;for(let a of t)if(i=Df(mf(a,e),n),i!==void 0)return hf(e,i)?Cf(n,r,e,i):i}function Df(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Of(e){let t=e._keys;return t||=e._keys=kf(e._scopes),t}function kf(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 Af(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 Pf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=Uu(a,i),c=Uu(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 Ff(e,t,n){let r=e.length,i,a,o,s,c,l=Mf(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)Lf(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 Gf(e,t){return Wf(e).getPropertyValue(t)}var Kf=[`top`,`right`,`bottom`,`left`];function qf(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=Kf[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var Jf=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function Yf(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(Jf(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 Xf(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=Wf(n),a=i.boxSizing===`border-box`,o=qf(i,`padding`),s=qf(i,`border`,`width`),{x:c,y:l,box:u}=Yf(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 Zf(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Hf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=Wf(a),s=qf(o,`border`,`width`),c=qf(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=Uf(o.maxWidth,a,`clientWidth`),i=Uf(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||Tu,maxHeight:i||Tu}}var Qf=e=>Math.round(e*10)/10;function $f(e,t,n,r){let i=Wf(e),a=qf(i,`margin`),o=Uf(i.maxWidth,e,`clientWidth`)||Tu,s=Uf(i.maxHeight,e,`clientHeight`)||Tu,c=Zf(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=qf(i,`border`,`width`),t=qf(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 ep(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 tp=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};Vf()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function np(e,t){let n=Gf(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function rp(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function ip(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 ap(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=rp(e,i,n),s=rp(i,a,n),c=rp(a,t,n);return rp(rp(o,s,n),rp(s,c,n),n)}var op=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}}},sp=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function cp(e,t,n){return e?op(t,n):sp()}function lp(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 up(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function dp(e){return e===`angle`?{between:Ku,compare:Wu,normalize:Gu}:{between:Yu,compare:(e,t)=>e-t,normalize:e=>e}}function fp({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 pp(e,t,n){let{property:r,start:i,end:a}=n,{between:o,normalize:s}=dp(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(fp({start:g,end:e,loop:f,count:o,style:p})),g=null),n=e,y=_));return g!==null&&m.push(fp({start:g,end:d,loop:f,count:o,style:p})),m}function hp(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 _p(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 vp(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=gp(n,i,a,r);return r===!0?yp(e,[{start:o,end:s,loop:a}],n,t):yp(e,_p(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,id.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)}},Dp=`transparent`,Op={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=_d(e||Dp),i=r.valid&&_d(t||Dp);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},kp=class{constructor(e,t,n,r){let i=t[n];r=cf([e.to,r,i,e.from]);let a=cf([e.from,i,r]);this._active=!0,this._fn=e.fn||Op[e.type||typeof a],this._easing=hd[e.easing]||hd.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=cf([e.to,t,r,e.from]),this._from=cf([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];(Zl(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=Mp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&jp(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 kp(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 Ep.add(this._chart,n),!0}};function jp(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function Wp(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=Bp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function Kp(e,t){return uf(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function qp(e,t,n){return uf(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function Jp(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 Yp=e=>e===`reset`||e===`none`,Xp=(e,t)=>t?e:Object.assign({},e),Zp=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:Ip(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=zp(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&&Jp(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=tu(n.xAxisID,Gp(e,`x`)),a=t.yAxisID=tu(n.yAxisID,Gp(e,`y`)),o=t.rAxisID=tu(n.rAxisID,Gp(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&&nd(this._data,this),e._stacked&&Jp(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(Ql(t)){let e=this._cachedMeta;this._data=Rp(t,e)}else if(n!==t){if(n){nd(n,this);let e=this._cachedMeta;Jp(e),e._parsed=[]}t&&Object.isExtensible(t)&&td(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=zp(t.vScale,t),t.stack!==n.stack&&(r=!0,Jp(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(Wp(this,t._parsed),t._stacked=zp(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=Zl(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(Xp(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 Ap(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||Yp(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){Yp(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!Yp(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 em(e){let t=e.iScale,n=$p(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(vu(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 im(e,t,n,r){return Zl(e)?rm(e,t,n,r):t[n.axis]=n.parse(e,r),t}function am(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):ju(e)}function cm(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(Xl(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[tu(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;dKu(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>Ku(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Du,u,f),_=m(Su,l,d),v=m(Su+Du,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 _m=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=>+gu(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*Cu:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Td(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=Xl(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()}},ym=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=Td(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return Af.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*Su,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)?zu(this.resolveDataElementOptions(e,t).angle||n):0}},bm=Object.freeze({__proto__:null,BarController:mm,BubbleController:hm,DoughnutController:_m,LineController:vm,PieController:class extends _m{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:ym,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 Af.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 xm(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var Sm={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return xm()}parse(){return xm()}format(){return xm()}add(){return xm()}diff(){return xm()}startOf(){return xm()}endOf(){return xm()}}};function Cm(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:Zu;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=>!Xl(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!Xl(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 wm(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 jm={evaluateInteractionItems:wm,modes:{index(e,t,n,r){let i=Xf(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?Em(e,i,a,r,o):km(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=Xf(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?Em(e,i,a,r,o):km(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 Pm(e,t){return e.filter(e=>Mm.indexOf(e.pos)===-1&&e.box.axis===t)}function Fm(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 Im(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Fm(Nm(t,`left`),!0),i=Fm(Nm(t,`right`)),a=Fm(Nm(t,`top`),!0),o=Fm(Nm(t,`bottom`)),s=Pm(t,`x`),c=Pm(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Nm(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function Bm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Vm(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 Hm(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&&Vm(o,a.getPadding());let s=Math.max(0,t.outerWidth-Bm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-Bm(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 Um(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 Wm(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 Gm(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);Vm(f,of(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Rm(c.concat(l),d);Gm(s.fullSize,p,d,m),Gm(c,p,d,m),Gm(l,p,d,m)&&Gm(c,p,d,m),Um(p),qm(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,qm(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},au(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})})}},Ym=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){}},Xm=class extends Ym{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},Zm=`$chartjs`,Qm={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},$m=e=>e===null||e===``;function eh(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[Zm]={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`,$m(i)){let t=np(e,`width`);t!==void 0&&(e.width=t)}if($m(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=np(e,`height`);t!==void 0&&(e.height=t)}return e}var th=tp?{passive:!0}:!1;function nh(e,t,n){e&&e.addEventListener(t,n,th)}function rh(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,th)}function ih(e,t){let n=Qm[e.type]||e.type,{x:r,y:i}=Xf(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function ah(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function oh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=ah(n.addedNodes,r),t&&=!ah(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function sh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=ah(n.removedNodes,r),t&&=!ah(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var ch=new Map,lh=0;function uh(){let e=window.devicePixelRatio;e!==lh&&(lh=e,ch.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function dh(e,t){ch.size||window.addEventListener(`resize`,uh),ch.set(e,t)}function fh(e){ch.delete(e),ch.size||window.removeEventListener(`resize`,uh)}function ph(e,t,n){let r=e.canvas,i=r&&Hf(r);if(!i)return;let a=ad((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),dh(e,a),o}function mh(e,t,n){n&&n.disconnect(),t===`resize`&&fh(e)}function hh(e,t,n){let r=e.canvas,i=ad(t=>{e.ctx!==null&&n(ih(t,e))},e);return nh(r,t,i),i}var gh=class extends Ym{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?(eh(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[Zm])return!1;let n=t[Zm].initial;[`height`,`width`].forEach(e=>{let r=n[e];Xl(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[Zm],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:oh,detach:sh,resize:ph}[t]||hh)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:mh,detach:mh,resize:mh}[t]||rh)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return $f(e,t,n,r)}isAttached(e){let t=e&&Hf(e);return!!(t&&t.isConnected)}};function _h(e){return!Vf()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?Xm:gh}var vh=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 Iu(this.x)&&Iu(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 yh(e,t){let n=e.options.ticks,r=bh(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?Sh(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return Ch(t,l,a,o/i),l;let u=xh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(wh(t,l,u,Xl(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function Sh(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Dh=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Oh=(e,t)=>Math.min(t||e,e);function kh(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function jh(e,t){au(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:eu(t,eu(n,t)),max:eu(n,eu(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(){iu(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=lf(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=qu(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-Mh(e.grid)-t.padding-Nh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=Bu(Math.min(Math.asin(qu((l.highest.height+6)/o,-1,1)),Math.asin(qu(s/c,-1,1))-Math.asin(qu(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){iu(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){iu(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=Nh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=Mh(i)+a):(e.height=this.maxHeight,e.width=Mh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=zu(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(){iu(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 Ju(this._alignToPixels?Rd(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=Mh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Rd(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=tu(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(-zu(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(`.`);Pd.route(a,i,c,s)})}function Hh(e){return`id`in e&&`defaults`in e}var Uh=new class{constructor(){this.controllers=new zh(Qp,`datasets`,!0),this.elements=new zh(vh,`elements`),this.plugins=new zh(Object,`plugins`),this.scales=new zh(Rh,`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):au(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=_u(e);iu(n[`before`+r],[],n),t[e](n),iu(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 Gh(e){let t={},n=[],r=Object.keys(Uh.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 tg(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function ng(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 tg(e,`x`,n[0])||tg(e,`y`,n[0])}return{}}function rg(e,t){let n=Ad[e.type]||{scales:{}},r=t.scales||{},i=Yh(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=eg(t,o,ng(t,e),Pd.scales[o.type]),c=Zh(s,i),l=n.scales||{};a[t]=du(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||Yh(i,t),s=(Ad[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=Xh(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),du(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];du(t,[Pd.scales[t.type],Pd.scale])}),a}function ig(e){let t=e.options||={};t.plugins=tu(t.plugins,{}),t.scales=rg(e,t)}function ag(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function og(e){return e||={},e.data=ag(e.data),ig(e),e}var sg=new Map,cg=new Set;function lg(e,t){let n=sg.get(e);return n||(n=t(),sg.set(e,n),cg.add(n)),n}var ug=(e,t,n)=>{let r=gu(t,n);r!==void 0&&e.add(r)},dg=class{constructor(e){this._config=og(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=ag(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(),ig(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return lg(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return lg(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return lg(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return lg(`${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=>ug(s,e,t))),t.forEach(e=>ug(s,r,e)),t.forEach(e=>ug(s,Ad[i]||{},e)),t.forEach(e=>ug(s,Pd,e)),t.forEach(e=>ug(s,jd,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),cg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,Ad[t]||{},Pd.datasets[t]||{},{type:t},Pd,jd]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=fg(this._resolverCache,e,r),s=a;if(mg(a,t)){i.$shared=!1,n=yu(n)?n():n;let t=this.createResolver(e,n,o);s=ff(a,n,t)}for(let e of t)i[e]=s[e];return i}createResolver(e,t,n=[``],r){let{resolver:i}=fg(this._resolverCache,e,n);return Ql(t)?ff(i,t,void 0,r):i}};function fg(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:df(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var pg=e=>Ql(e)&&Object.getOwnPropertyNames(e).some(t=>yu(e[t]));function mg(e,t){let{isScriptable:n,isIndexable:r}=pf(e);for(let i of t){let t=n(i),a=r(i),o=(a||t)&&e[i];if(t&&(yu(o)||pg(o))||a&&Zl(o))return!0}return!1}var hg=`4.5.1`,gg=[`top`,`bottom`,`left`,`right`,`chartArea`];function _g(e,t){return e===`top`||e===`bottom`||gg.indexOf(e)===-1&&t===`x`}function vg(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function yg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),iu(n&&n.onComplete,[e],t)}function bg(e){let t=e.chart,n=t.options.animation;iu(n&&n.onProgress,[e],t)}function xg(e){return Vf()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var Sg={},Cg=e=>{let t=xg(e);return Object.values(Sg).filter(e=>e.canvas===t).pop()};function wg(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 Tg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var Eg=class{static defaults=Pd;static instances=Sg;static overrides=Ad;static registry=Uh;static version=hg;static getChart=Cg;static register(...e){Uh.add(...e),Dg()}static unregister(...e){Uh.remove(...e),Dg()}constructor(e,t){let n=this.config=new dg(t),r=xg(e),i=Cg(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||(_h(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=Yl(),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 Wh,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=od(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],Sg[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}Ep.listen(this,`complete`,yg),Ep.listen(this,`progress`,bg),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return Xl(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 Uh}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():ep(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return zd(this.canvas,this.ctx),this}stop(){return Ep.stop(this),this}resize(e,t){Ep.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,ep(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),iu(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){au(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=eg(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),au(i,t=>{let i=t.options,a=i.id,o=eg(a,i),s=tu(i.type,t.dtype);(i.position===void 0||_g(i.position,o)!==_g(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new(Uh.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),au(r,(e,t)=>{e||delete n[t]}),au(n,e=>{Jm.configure(this,e,e.options),Jm.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(vg(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){au(this.scales,e=>{Jm.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!bu(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)wg(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;Jm.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],au(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=Tp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&Ud(t,r),e.controller.draw(),r&&Wd(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Hd(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=jm.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||=uf(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);vu(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(),Ep.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)};au(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(){au(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},au(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}});ou(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=xu(e),c=Tg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,iu(i.onHover,[e,o,this],this),s&&iu(i.onClick,[e,o,this],this));let l=!ou(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 Dg(){return au(Eg.instances,e=>e._plugins.invalidate())}function Og(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,Gu(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,Gu(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*Gu(r-n));if(u===`round`)e.arc(i,a,t,n-Su/2,r+Su/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+Su/2)+i,c=-o*Math.sin(n+Su/2)+a,l=o*Math.cos(r+Su/2)+i,u=o*Math.sin(r+Su/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 kg(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+Du,r-Du),e.closePath(),e.clip()}function Ag(e){return nf(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function jg(e,t,n,r){let i=Ag(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 qu(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:qu(i.innerStart,0,o),innerEnd:qu(i.innerEnd,0,o)}}function Mg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Ng(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/Su)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=jg(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=Mg(C,ee,o,s);e.arc(t.x,t.y,y,ee,_+Du)}let n=Mg(ne,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=Mg(ne,ie,o,s);e.arc(t.x,t.y,x,_+Du,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=Mg(te,re,o,s);e.arc(t.x,t.y,b,re+Math.PI,g-Du)}let i=Mg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=Mg(S,w,o,s);e.arc(t.x,t.y,v,g-Du,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 Pg(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Ng(e,t,n,r,c,i);for(let t=0;t=Su&&p===0&&u!==`miter`&&Og(e,t,h),a||(Ng(e,t,n,r,h,i),e.stroke())}var Ig=class extends vh{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}=Hu(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=tu(l,o-a),f=Ku(r,a,o)&&a!==o,p=d>=Cu||f,m=Yu(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>Cu?Math.floor(n/Cu):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(Su,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Pg(e,this,s,i,a),Fg(e,this,s,i,a),e.restore()}};function Lg(e,t,n=t){e.lineCap=tu(n.borderCapStyle,t.borderCapStyle),e.setLineDash(tu(n.borderDash,t.borderDash)),e.lineDashOffset=tu(n.borderDashOffset,t.borderDashOffset),e.lineJoin=tu(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=tu(n.borderWidth,t.borderWidth),e.strokeStyle=tu(n.borderColor,t.borderColor)}function Rg(e,t,n){e.lineTo(n.x,n.y)}function zg(e){return e.stepped?Gd:e.tension||e.cubicInterpolationMode===`monotone`?Kd:Rg}function Bg(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 Ug(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Hg:Vg}function Wg(e){return e.stepped?ip:e.tension||e.cubicInterpolationMode===`monotone`?ap:rp}function Gg(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),Lg(e,t.options),e.stroke(i)}function Kg(e,t,n,r){let{segments:i,options:a}=t,o=Ug(t);for(let s of i)Lg(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var qg=typeof Path2D==`function`;function Jg(e,t,n,r){qg&&!t.options.segment?Gg(e,t,n,r):Kg(e,t,n,r)}var Yg=class extends vh{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;Bf(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||=vp(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=hp(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=Wg(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function u_(e){return c_[e%c_.length]}function d_(e){return l_[e%l_.length]}function f_(e,t){return e.borderColor=u_(t),e.backgroundColor=d_(t),++t}function p_(e,t){return e.backgroundColor=e.data.map(()=>u_(t++)),t}function m_(e,t){return e.backgroundColor=e.data.map(()=>d_(t++)),t}function h_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof _m?t=p_(n,t):i instanceof ym?t=m_(n,t):i&&(t=f_(n,t))}}function g_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function __(e){return e&&(e.borderColor||e.backgroundColor)}function v_(){return Pd.borderColor!==`rgba(0,0,0,0.1)`||Pd.backgroundColor!==`rgba(0,0,0,0.1)`}var y_={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=g_(r)||__(i)||a&&g_(a)||v_();if(!n.forceOverride&&o)return;let s=h_(e);r.forEach(s)}};function b_(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 x_(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(!Xl(d)&&!Xl(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 S_(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 C_(e){e.data.datasets.forEach(e=>{S_(e)})}function w_(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=qu(Zu(t,a.axis,o).lo,0,n-1)),i=l?qu(Zu(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var T_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){C_(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(cf([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}=w_(s,c);if(d<=(n.threshold||4*r)){S_(t);return}Xl(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=b_(c,u,d,r,n);break;case`min-max`:f=x_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){C_(e)}};function E_(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=k_(r,s,i);let c=D_(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=hp(t,c);for(let t of l){let r=D_(n,a[t.start],a[t.end],t.loop),s=mp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:A_(c,r,`start`,Math.max)},end:{[n]:A_(c,r,`end`,Math.min)}})}}return o}function D_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=Gu(i),a=Gu(a)),{property:e,start:i,end:a}}function O_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=k_(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 k_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function A_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function j_(e,t){let n=[],r=!1;return Zl(e)?(r=!0,n=e):n=O_(e,t),n.length?new Yg({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function M_(e){return e&&e.fill!==!1}function N_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!$l(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function P_(e,t,n){let r=R_(e);if(Ql(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return $l(i)&&Math.floor(i)===i?F_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function F_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function I_(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 L_(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 R_(e){let t=e.options,n=t.fill,r=tu(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function z_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=B_(t,n);s.push(j_({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&&Y_(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;M_(n)&&Y_(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!M_(r)||n.drawTime!==`beforeDatasetDraw`||Y_(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},rv=(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)}},iv=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,av=class extends vh{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=iu(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=sf(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=rv(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}=ov(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=cp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=cd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=cd(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=cd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=cd(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;Ud(e,this),this._draw(),Wd(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=Pd.color,s=cp(e.rtl,this.left,this.width),c=sf(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}=rv(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=tu(n.lineWidth,1);if(r.fillStyle=tu(n.fillStyle,o),r.lineCap=tu(n.lineCap,`butt`),r.lineDashOffset=tu(n.lineDashOffset,0),r.lineJoin=tu(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=tu(n.strokeStyle,o),r.setLineDash(tu(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;Vd(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=af(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?Zd(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){Xd(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:cd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:cd(i,this.top+y+l,this.bottom-t[0].height),line:0},lp(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=cd(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=cd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=ld(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+=lv(o,e)+l}else f.y+=b}),up(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=sf(t.font),r=of(t.padding);if(!t.display)return;let i=cp(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=cd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+cd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=cd(o,u,u+d);a.textAlign=i.textAlign(sd(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,Xd(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=sf(e.font),n=of(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(Yu(e,this.left,this.right)&&Yu(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 cv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=lv(t,n)),r}function lv(e,t){return t*(e.text?e.text.length:0)}function uv(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var dv={id:`legend`,_element:av,start(e,t,n){let r=e.legend=new av({ctx:e.ctx,options:n,chart:e});Jm.configure(e,r,n),Jm.addBox(e,r)},stop(e){Jm.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;Jm.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=of(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)}}},fv=class extends vh{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=Zl(n.text)?n.text.length:1;this._padding=of(n.padding);let i=r*sf(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=cd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=cd(o,r,t),s=Su*-.5):(l=i-e,u=cd(o,t,r),s=Su*.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=sf(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);Xd(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:sd(t.align),textBaseline:`middle`,translation:[i,a]})}};function pv(e,t){let n=new fv({ctx:e.ctx,options:t,chart:e});Jm.configure(e,n,t),Jm.addBox(e,n),e.titleBlock=n}var mv={id:`title`,_element:fv,start(e,t,n){pv(e,n)},stop(e){let t=e.titleBlock;Jm.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;Jm.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}},hv=new WeakMap,gv={id:`subtitle`,start(e,t,n){let r=new fv({ctx:e.ctx,options:n,chart:e});Jm.configure(e,r,n),Jm.addBox(e,r),hv.set(e,r)},stop(e){Jm.removeBox(e,hv.get(e)),hv.delete(e)},beforeUpdate(e,t,n){let r=hv.get(e);Jm.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}},_v={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 bv(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 xv(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=sf(t.bodyFont),l=sf(t.titleFont),u=sf(t.footerFont),d=a.length,f=i.length,p=r.length,m=of(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,au(e.title,y),n.font=c.string,au(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,au(r,e=>{au(e.before,y),au(e.lines,y),au(e.after,y)}),v=0,n.font=u.string,au(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function Sv(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function Cv(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 wv(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`),Cv(l,e,t,n)&&(l=`center`),l}function Tv(e,t,n){let r=n.yAlign||t.yAlign||Sv(e,n);return{xAlign:n.xAlign||t.xAlign||wv(e,t,n,r),yAlign:r}}function Ev(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Dv(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Ov(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}=af(o),m=Ev(t,s),h=Dv(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:qu(m,0,r.width-t.width),y:qu(h,0,r.height-t.height)}}function kv(e,t,n){let r=of(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function Av(e){return vv([],yv(e))}function jv(e,t,n){return uf(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function Mv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Nv={beforeTitle:Jl,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=Mv(n,e);vv(t.before,yv(Pv(i,`beforeLabel`,this,e))),vv(t.lines,Pv(i,`label`,this,e)),vv(t.after,yv(Pv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return Av(Pv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=Pv(n,`beforeFooter`,this,e),i=Pv(n,`footer`,this,e),a=Pv(n,`afterFooter`,this,e),o=[];return o=vv(o,yv(r)),o=vv(o,yv(i)),o=vv(o,yv(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))),au(o,t=>{let n=Mv(e.callbacks,t);r.push(Pv(n,`labelColor`,this,t)),i.push(Pv(n,`labelPointStyle`,this,t)),a.push(Pv(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=_v[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=xv(this,n),o=Object.assign({},e,t),s=Tv(this.chart,n,o),c=Ov(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}=af(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=cp(n.rtl,this.x,this.width);for(e.x=kv(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=sf(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,Zd(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),Zd(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=sf(n.bodyFont),d=u.lineHeight,f=0,p=cp(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=kv(this,h,n),t.fillStyle=n.bodyColor,au(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=_v[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=xv(this,e),o=Object.assign({},n,this._size),s=Tv(t,e,o),c=Ov(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=of(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),lp(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),up(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=!ou(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||!ou(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=_v[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},Iv=Object.freeze({__proto__:null,Colors:y_,Decimation:T_,Filler:nv,Legend:dv,SubTitle:gv,Title:mv,Tooltip:{id:`tooltip`,_element:Fv,positioners:_v,afterInit(e,t,n){n&&(e.tooltip=new Fv({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:Nv},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`]}}),Lv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Rv(e,t,n,r){let i=e.indexOf(t);return i===-1?Lv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var zv=(e,t)=>e===null?null:qu(Math.round(e),0,t);function Bv(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 Hv(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=!Xl(a),_=!Xl(o),v=!Xl(c),y=(h-m)/(u+1),b=Nu((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=Nu(w*b/p/f)*f),Xl(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&&Lu((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=Mu(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let ee=Math.max(Vu(b),Vu(S));x=10**(Xl(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&&Mu(n[n.length-1].value,o,Uv(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function Uv(e,t,{horizontal:n,minRotation:r}){let i=zu(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var Wv=class extends Rh{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 Xl(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=ju(r),t=ju(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=Hv({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`&&Ru(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 Td(e,this.chart.options.locale,this.options.ticks.format)}},Gv=class extends Wv{static id=`linear`;static defaults={ticks:{callback:Od.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=$l(e)?e:0,this.max=$l(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=zu(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}},Kv=e=>Math.floor(Au(e)),qv=(e,t)=>10**(Kv(e)+t);function Jv(e){return e/10**Kv(e)==1}function Yv(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function Xv(e,t){let n=Kv(t-e);for(;Yv(e,t,n)>10;)n++;for(;Yv(e,t,n)<10;)n--;return Math.min(n,Kv(e))}function Zv(e,{min:t,max:n}){t=eu(e.min,t);let r=[],i=Kv(t),a=Xv(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=eu(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=eu(e.max,f);return r.push({value:p,major:Jv(p),significand:d}),r}var Qv=class extends Rh{static id=`logarithmic`;static defaults={ticks:{callback:Od.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=Wv.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return $l(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=$l(e)?Math.max(0,e):null,this.max=$l(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!$l(this._userMin)&&(this.min=e===qv(this.min,0)?qv(this.min,-1):qv(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(qv(n,-1)),a(qv(r,1)))),n<=0&&i(qv(r,-1)),r<=0&&a(qv(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=Zv({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Ru(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`:Td(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=Au(e),this._valueRange=Au(this.max)-Au(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Au(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function $v(e){let t=e.ticks;if(t.display&&e.display){let e=of(t.backdropPadding);return tu(t.font&&t.font.size,Pd.font.size)+e.height}return 0}function ey(e,t,n){return n=Zl(n)?n:[n],{w:Ld(e,t.string,n),h:n.length*t.lineHeight}}function ty(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 ny(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?Su/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 iy(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(Bu(Gu(c.angle+Du))),u=ly(c.y,s.h,l),d=sy(l),f=cy(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 ay(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Hd({x:n,y:r},t)||Hd({x:n,y:a},t)||Hd({x:i,y:r},t)||Hd({x:i,y:a},t))}function oy(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:$v(a)/2,additionalAngle:o?Su/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function uy(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!Xl(s)){let n=af(t.borderRadius),c=of(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(),Zd(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function dy(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));uy(n,a,t);let o=sf(a.font),{x:s,y:c,textAlign:l}=t;Xd(n,e._pointLabels[i],s,c+o.lineHeight/2,o,{color:a.color,textAlign:l,textBaseline:`middle`})}}function fy(e,t,n,r){let{ctx:i}=e;if(n)i.arc(e.xCenter,e.yCenter,t,0,Cu);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=iu(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?ny(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=Cu/(this._pointLabels.length||1),n=this.options.startAngle||0;return Gu(e*t+zu(n))}getDistanceFromCenterForValue(e){if(Xl(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(Xl(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);py(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=sf(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=of(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}Xd(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},gy={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}},_y=Object.keys(gy);function vy(e,t){return e-t}function yy(e,t){if(Xl(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),$l(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(Iu(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function by(e,t,n,r){let i=_y.length;for(let a=_y.indexOf(e);a=_y.indexOf(n);a--){let n=_y[a];if(gy[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return _y[n?_y.indexOf(n):0]}function Sy(e){for(let t=_y.indexOf(e)+1,n=_y.length;t=t?n[r]:n[i];e[a]=!0}}function wy(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 Ty(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=qu(t,0,a),n=qu(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||by(i.minUnit,t,n,this._getLabelCapacity(t)),o=tu(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=Iu(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 iu(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}=Zu(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}=Zu(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 Oy=class extends Ey{static id=`timeseries`;static defaults=Ey.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=Dy(t,this.min),this._tableRange=Dy(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(Dy(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Dy(this._table,n*this._tableRange+this._minPos,!0)}},ky=[bm,s_,Iv,Object.freeze({__proto__:null,CategoryScale:Vv,LinearScale:Gv,LogarithmicScale:Qv,RadialLinearScale:hy,TimeScale:Ey,TimeSeriesScale:Oy})];Eg.register(...ky);var Ay=Eg,jy=R(``);function My(e,t){E(t,!0);let n=G(t,`class`,3,``),r=G(t,`ariaLabel`,3,``);function i(e){if(Oa.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new Ay(e.getContext(`2d`),n);return()=>r.destroy()}var a=jy();Mi(a,()=>i),F(()=>{U(a,1,Fi(n())),W(a,`aria-label`,r())}),z(e,a),D()}var Ny=R(``),Py=R(`
`);function Fy(e,t){E(t,!0);let n=G(t,`options`,19,()=>[]),r=G(t,`ariaLabel`,3,``),i=G(t,`class`,3,``);var a=Py();H(a,21,n,e=>e.value,(e,n)=>{var r=Ny();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 Iy(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Ly(){return{grid:Iy(`--chart-grid`),text:Iy(`--chart-text`),dayMarker:Iy(`--chart-day-marker`),tooltipBg:Iy(`--chart-tooltip-bg`),tooltipBorder:Iy(`--chart-tooltip-border`),tooltipText:Iy(`--chart-tooltip-text`)}}function Ry(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function zy(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function By(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 Vy=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Hy(){return[...Vy]}function Uy(e){let t=5381,n=String(e||``);for(let e=0;edc(e)}}var Yy={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}},Xy=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function Zy(){return{input:0,output:0,prompt:0,local:0}}function Qy(e){return String(e).padStart(2,`0`)}function $y(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function eb(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 tb(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=Zy();for(let o of e||[]){let e=Date.parse(o&&o.start),s=$y(o&&o.input_tokens),c=$y(o&&o.output_tokens),l=$y(o&&o.prompt_cached_tokens),u=$y(o&&o.locally_cached_tokens);n.push(eb(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 nb(e){let t=e||Zy();return t.input+t.output+t.prompt+t.local>0}function rb(e,t){return dc(Math.max(0,Math.round(e&&e[t]||0)))}function ib(e){return(Yy[e]||Yy.minutes).windowLabel}function ab(e,t){return`Live token throughput, `+ib(t).toLowerCase()+`. Input `+rb(e,`input`)+`, output `+rb(e,`output`)+`, prompt cached `+rb(e,`prompt`)+`, locally cached `+rb(e,`local`)+` tokens.`}function ob(e,t,n,r){let i=e=>dc(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 sb=900,cb=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){!Yy[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=Yy[this.granularity]||Yy.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()},sb))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await vs(`/admin/usage/throughput?granularity=`+(Yy[e]||Yy.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(bs(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await Cs.ensureLoaded(),this.active&&Cs.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){let t=()=>{e.signal.aborted||this.#s!==e||this.#p()};try{let n=await gs(`/admin/live/logs?types=usage`,{signal:e.signal});if(!n.ok||!n.body||typeof n.body.getReader!=`function`){t();return}this.#o=0,await Gy(n.body.getReader(),e=>this.#f(e)),t()}catch(n){if(bs(n)||e.signal.aborted)return;console.error(`Live usage stream failed:`,n),t()}}#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}=qy(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},lb=R(`
`),ub=R(`
Waiting for live requests…
`),db=R(`

Live Token Throughput

`);function fb(e,t){E(t,!0);let n=O(()=>tb(cb.buckets,cb.granularity)),r=O(()=>I(n).totals);function i(){return{input:By(`var(--token-input)`),output:By(`var(--token-output)`),prompt:By(`var(--token-prompt)`),local:By(`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=db(),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),Fy(P(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return Xy},get value(){return cb.granularity},onchange:e=>cb.setGranularity(e)}),T(s);var m=P(s,2);H(m,21,()=>a,e=>e.metric,(e,t)=>{var n=lb(),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)},[()=>rb(I(r),I(t).metric)]),z(e,n)}),T(m);var h=P(m,2),g=M(h);{let e=O(()=>ab(I(r),cb.granularity));My(g,{get ariaLabel(){return I(e)},build:()=>ob(Ly(),i(),I(n),cb.granularity)})}var _=P(g,2),v=e=>{z(e,ub())},y=O(()=>!nb(I(r)));V(_,e=>{I(y)&&e(v)}),T(h),T(o),F(e=>{d=U(u,1,`live-dot`,null,d,{"is-streaming":cb.active}),B(p,e)},[()=>ib(cb.granularity)]),z(e,o),D()}function pb(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 mb(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 hb(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+mb(t,n)}function gb(e,t,n){let r=mb(t,n);return r<=0?``:sc(hb(e,t,n)-r)+` to providers + `+sc(r)+` from cache`}function _b(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 vb(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 `+sc(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 yb(e,t,n){return vb(e,t,n).reduce((e,t)=>e+t.tokens,0)}function bb(e,t,n){return yb(e,t,n)>0}function xb(e,t,n){let r=vb(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 Sb(e,t,n){return xb(e,t,n).filter(e=>e.tokens>0)}function Cb(e){let t=[e.label+`: `+sc(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` -`)}function wb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function Tb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function Eb(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=Tb(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 Db(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 Ob(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 kb(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 Ab(e){return kb(e)?Math.round(Ob(e))+`%`:`—`}function jb(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:zy(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:Ry(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:Jy(e)}}}}}function Mb(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 Nb=`gomodel_provider_status_details_expanded`,Pb=`gomodel_provider_card_expanded_overrides`,Fb=3e3,Ib=`https://gomodel.enterpilot.io/docs/providers/`,Lb={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 Rb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function zb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Nb);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Nb,`false`);let r=JSON.parse(e.getItem(Pb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function Bb(e,t){if(e)try{e.setItem(Nb,t?`true`:`false`)}catch{}}function Vb(e,t){if(e)try{e.setItem(Pb,JSON.stringify(t))}catch{}}function Hb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function Ub(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function Wb(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function Gb(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function Kb(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 Yb(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 Xb(e,t){let n=Yb(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 Zb(e,t){let n=Yb(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 $b(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?Lb[t]:``;return n?Ib+n+`?utm_source=gomodel_dashboard`:``}function ex(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 tx(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 nx(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function rx(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 ix(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function ax(e){let t=ix(e);return t?String(t.circuit_state||``).trim():``}function ox(e){let t=ax(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function sx(e){let t=ax(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function cx(e){let t=ix(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 lx(e){let t=ix(e);return t&&Array.isArray(t.models)?t.models:[]}function ux(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function dx(e){let t=e&&e.last_error;return!t||!t.message?``:(t.status_code?`HTTP `+String(t.status_code)+`: `:``)+t.message}function fx(){return{name:``,slug:``,url:``,transport:`http`,description:``,enabled:!0,headers:[],allowed_tools:``,disallowed_tools:``,user_paths:``,tool_timeout_seconds:``}}function px(){return{server:``,status:``,instructions:``,tools:[],prompts:[],resources:[],templates:[]}}function mx(e){return String(e&&(e.slug||e.name)||``).trim()}function hx(e){return String(e&&e.status||``).trim()||`connecting`}function gx(e){switch(hx(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 _x(e,t){let n=hx(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 vx(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function yx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function bx(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 xx(e){return String(e||``).split(` -`).map(e=>e.trim()).filter(e=>e)}function Sx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Cx(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 wx(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 Tx(e){return{name:String(e.name||``).trim(),slug:mx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:Sx(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 Ex(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||bx(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=>mx(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:Cx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:ac(e.allowed_tools),disallowed_tools:ac(e.disallowed_tools),user_paths:xx(e.user_paths),tool_timeout_seconds:s}}}function Dx(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 Ox(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function kx(e){let t=e||px(),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:Ox(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 Ax(e){return kx(e).length===0}function jx(e){return(e||[]).length}function Mx(e){return(e||[]).filter(e=>hx(e)===`connected`).length}function Nx(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&hx(e)===`degraded`).length}function Px(e,t){return!!e&&jx(t)>0}function Fx(e){return String(Mx(e))+`/`+String(jx(e))}function Ix(e){return Nx(e)>0?`is-degraded`:`is-healthy`}function Lx(e){let t=Nx(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=jx(e),r=Mx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Rx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function zx(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 Bx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Vx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Hx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function Ux(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function Wx(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 Gx(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:Wx(Number(t))}function Kx(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 qx(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=Kx(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function Jx(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=Kx(i,n);return a.month+` `+a.day+`, `+a.year}function Yx(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 Xx(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=>qx(e,r,i)),c=Yx(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:zy(e,{title:e=>e.length?Jx(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:Ry(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ry(),precision:0,callback:e=>dc(e)}}}}}}function Zx(e=Hy()){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||Zx();return{type:`line`,data:{labels:t.map(e=>qx(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:zy(e,{title:e=>e.length?Jx(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+`: `+Wx(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ry(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Ry(),callback:e=>Wx(e)}}}}}}var $x=class{#e=k(j(Rb()));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=zb(Ca());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Hb(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,Vb(Ca(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Bb(Ca(),this.detailsExpanded),Vb(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 vs(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Rb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Rb();n.summary||=Rb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(bs(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Rb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),Jb(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Fb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},eS=class{#e=k(j(Rx()));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 vs(`/admin/audit/stats?`+Nc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Rx();return}this.stats=zx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Rx()}finally{e===this.#n&&(this.loading=!1)}}},tS=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 Cs.ensureLoaded(),!Cs.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await vs(`/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}}},nS=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 vs(`/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(bs(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},rS=new $x,iS=new eS,aS=new tS,oS=new nS,sS=(e,t=f,n=f,r=f,i=f)=>{var a=lS(),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)},[()=>fc(`Input tokens`,n()),()=>dc(n()),()=>fc(`Output tokens`,r()),()=>dc(r()),()=>fc(`Total tokens`,i()),()=>dc(i())]),z(e,a)},cS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=fS(),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=uS(),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=dS(),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)},lS=R(`
i + o =
`),uS=R(``),dS=R(` `),fS=R(`
`),pS=R(`
Cache Hits
`),mS=R(`
Total Requests
Estimated Cost
Prompt Cache Rate
`);function hS(e,t){E(t,!0);let n=O(()=>zc.summary),r=O(()=>zc.cacheOverview),i=O(()=>zc.cacheAnalyticsEnabled()),a=O(()=>rS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=mS(),c=M(s);{let e=O(()=>pb(I(n)));sS(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=pS(),n=P(M(t),2),i=M(n,!0);T(n),T(t),F(e=>B(i,e),[()=>sc(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(()=>_b(I(r)));sS(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);My(x,{build:()=>Mb(Ob(I(n)),By(`var(--token-prompt)`),By(`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(()=>Ub(I(a))),n=O(()=>Gb(I(a))),r=O(()=>qb(I(a))),i=O(()=>Kb(I(a))?{title:`View providers overview`,onclick:o}:null);cS(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(()=>Ix(aS.servers)),n=O(()=>Fx(aS.servers)),r=O(()=>Lx(aS.servers));cS(e,()=>`mcp-servers-flag`,()=>I(t),()=>`MCP Servers`,()=>I(n),()=>I(r),()=>({title:`View MCP servers`,onclick:()=>Yo.navigate(`mcp-servers`)}))}},re=O(()=>Px(aS.available,aS.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)},[()=>gb(I(n),I(r),I(i)),()=>sc(hb(I(n),I(r),I(i))),()=>cc(I(n).total_cost),()=>`Prompt cache rate `+Ab(I(n)),()=>Ab(I(n))]),z(e,s),D()}Hr([`click`]);var gS=R(` `),_S=R(`
`),vS=R(`No usage in the selected period yet`),yS=R(`
`),bS=R(`

Tokens

Share of input tokens over the selected period
`);function xS(e,t){E(t,!0);let n=O(()=>zc.cacheAnalyticsEnabled()),r=O(()=>xb(zc.summary,zc.cacheOverview,I(n))),i=O(()=>Sb(zc.summary,zc.cacheOverview,I(n))),a=O(()=>bb(zc.summary,zc.cacheOverview,I(n)));var o=bS(),s=P(M(o),2);let c;var l=M(s);H(l,17,()=>I(i),e=>e.key,(e,t)=>{var n=_S(),r=M(n),i=e=>{var n=gS(),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)},[()=>Cb(I(t))]),z(e,n)});var u=P(l,2),d=e=>{z(e,vS())};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=yS(),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)},[()=>Cb(I(t)),()=>sc(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)},[()=>wb(I(i))]),z(e,o),D()}var SS=R(``);function CS(e,t){let n=G(t,`size`,3,16),r=G(t,`label`,3,`Loading`),i=G(t,`class`,3,``);var a=SS();F(()=>{U(a,1,Fi([`spinner`,i()]),`svelte-b54l9o`),Hi(a,`--spinner-size: ${n()??``}px`),W(a,`aria-label`,r())}),z(e,a)}var wS=Xr(` `),TS=Xr(``);function ES(e,t){let n=G(t,`label`,3,`No data`);var r=TS(),i=P(M(r),9),a=e=>{var t=wS(),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 DS=R(`
`),OS=R(`

`);function kS(e,t){E(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Nc.interval=e,t.onintervalchange?.()}function i(){let e=zc.daily;if(e.length===0)return null;let t=Nc.rangeStart(),n=Nc.rangeEnd(),r=Db(Eb(e,Nc.interval,t,n),Eb(Array.isArray(zc.cacheOverview.daily)?zc.cacheOverview.daily:[],Nc.interval,t,n));return jb(Ly(),r,{cacheEnabled:zc.cacheAnalyticsEnabled(),resolve:By})}var a=OS(),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)})));Fy(l,{ariaLabel:`Usage chart interval`,get options(){return I(e)},get value(){return Nc.interval},onchange:r})}T(o);var u=P(o,2),d=M(u);My(d,{build:i});var f=P(d,2),p=e=>{var t=DS();CS(M(t),{size:24,label:`Loading usage`}),T(t),z(e,t)},m=e=>{var t=DS();ES(M(t),{}),T(t),z(e,t)};V(f,e=>{zc.daily.length===0&&zc.loading?e(p):zc.daily.length===0&&!q.authError&&e(m,1)}),T(u),T(a),F(e=>B(c,e),[()=>Nc.chartTitle()]),z(e,a),D()}var AS=10,jS=.7;function MS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+jS,r=Math.ceil(n*AS);return r<1?1:r>AS?AS:r}function NS(){let e=[];for(let t=0;t<=AS;t++)e.push(t);return e}function PS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=$o(ts(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);es(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=es(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 FS(e){let t=$o(ts(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);es(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),es(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 `),zS=R(`
`),BS=R(`
`),VS=R(`
`),HS=R(`
`),US=R(`

Activity

Mon Wed Fri
`,1);function WS(e,t){E(t,!0);let n=k(j({show:!1,x:0,y:0,text:``})),r=O(()=>fs.currentDateKey()),i=O(()=>PS(oS.data,oS.mode,I(r))),a=O(()=>FS(I(r)));function o(e,t){t.empty||A(n,{show:!0,x:e.clientX,y:e.clientY,text:LS(t,oS.mode)},!0)}function s(){A(n,{show:!1,x:0,y:0,text:``},!0)}var c=US(),l=N(c),u=M(l),d=P(M(u),2),f=e=>{CS(e,{size:14,label:`Loading activity`})};V(d,e=>{oS.loading&&oS.data.length===0&&e(f)}),Fy(P(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return oS.mode},onchange:e=>oS.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=RS(),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=BS();H(r,23,()=>I(t),(e,t)=>n+`-`+t,(e,t)=>{var n=zS();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,NS,e=>e,(e,t)=>{var n=VS();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=HS(),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),[()=>IS(oS.data,oS.mode)]),z(e,c),D()}var GS=R(``),KS=R(`

`),qS=R(`
`);function JS(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=qS(),c=M(s),l=M(c);gi(l,()=>t.title??f);var u=P(l,2),d=e=>{var r=GS();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=KS(),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 YS=R(`

Provider Latency

`),XS=R(`
Avg
`),ZS=R(`

Requests by Status

Success 2xx 4xx 5xx
`,1);function QS(e,t){E(t,!0);let n=Zx(),r=O(()=>iS.stats);function i(){return{interval:I(r).interval,zone:fs.effectiveTimezone(),resolve:By,formatTimestamp:e=>fs.formatTimestamp(e)}}var a=Qr(),o=N(a),s=e=>{var t=ZS(),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);My(M(b),{build:()=>Xx(Ly(),I(r).buckets,i())}),T(b),T(a);var x=P(a,2),S=e=>{var t=XS(),a=M(t),o=M(a);JS(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,YS())},$$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);My(M(d),{build:()=>Qx(Ly(),I(r).buckets,I(r).provider_latency,{...i(),providerColor:n})}),T(d),T(t),F(e=>B(u,e),[()=>Gx(I(r))]),z(e,t)},C=O(()=>Vx(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)},[()=>Hx(I(r)),()=>sc(Ux(I(r),`status_2xx`)),()=>sc(Ux(I(r),`status_4xx`)),()=>sc(Ux(I(r),`status_5xx`))]),z(e,t)},c=O(()=>Bx(I(r)));V(o,e=>{I(c)&&e(s)}),z(e,a),D()}var $S=(e,t=f,n=f,r)=>{let i=Ot(()=>h(r?.(),!1));var a=nC(),o=M(a),s=M(o,!0);T(o);var c=P(o,2),l=e=>{var t=eC(),r=M(t,!0);T(t),F(()=>B(r,n())),z(e,t)},u=e=>{var t=tC(),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)},eC=R(` `),tC=R(` `),nC=R(`
`),rC=R(`

`),iC=R(`
Breaker State
`),aC=R(`
`),oC=R(`
Models (Recent Traffic)
`),sC=R(`
`),cC=R(`

`);function lC(e,t){E(t,!0);let n=O(()=>sx(t.provider)),r=O(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=cC();let a;var o=M(i),s=M(o),c=M(s,!0);T(s);var l=P(s,2),u=e=>{var n=rC(),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=sC(),i=M(r);{let e=O(()=>cx(t.provider));$S(i,()=>`Recent Requests`,()=>I(e))}var a=P(i,2),o=e=>{var r=iC(),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)},[()=>ox(t.provider)]),z(e,r)},s=O(()=>ax(t.provider));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{var n=oC(),r=P(M(n),2);H(r,21,()=>lx(t.provider),e=>e.model,(e,t)=>{var n=aC();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)},[()=>dx(I(t)),()=>ux(I(t))]),z(e,n)}),T(r),T(n),z(e,n)},u=O(()=>lx(t.provider).length>0);V(c,e=>{I(u)&&e(l)}),T(r),z(e,r)},p=O(()=>ix(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));$S(e,()=>I(n)[0],()=>I(n)[1],()=>!0)});var _=P(h,2);{let e=O(()=>nx(t.provider));$S(_,()=>`Configured Models`,()=>I(e))}var v=P(_,2);{let e=O(()=>ex(t.provider));$S(v,()=>`Retry`,()=>I(e))}var y=P(v,2);{let e=O(()=>tx(t.provider));$S(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 uC=R(` `),dC=R(``),fC=R(`

Models Available
Last Checked
`);function pC(e,t){E(t,!0);let n=O(()=>rS.cardExpanded(t.provider)),r=e=>fs.formatTimestamp(e);var i=fC(),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=uC(),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=dC();F((e,t,r)=>{W(n,`href`,e),W(n,`aria-label`,t),W(n,`title`,r)},[()=>$b(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(()=>$b(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);lC(ee,{get provider(){return t.provider},get expanded(){return I(n)}});var te=P(ee,2);let ne;K(M(te),{get icon(){return Ua},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`)},[()=>Wb(t.provider.status),()=>rx(t.provider),()=>sc(t.provider.runtime?.discovered_model_count),()=>Zb(t.provider,r),()=>Xb(t.provider,r)]),L(`click`,te,()=>rS.toggleCard(t.provider)),z(e,i),D()}Hr([`click`]);var mC=R(`

Providers Overview

`),hC=R(`
`);function gC(e,t){E(t,!0);let n=O(()=>rS.status.providers);var r=Qr(),i=N(r),a=e=>{var t=mC(),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)=>{pC(e,{get provider(){return I(t)}})}),T(l),T(t),F((e,t)=>{W(i,`aria-checked`,rS.detailsExpanded),W(i,`title`,e),B(o,t),c=U(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":rS.detailsExpanded})},[()=>rS.detailsToggleLabel(),()=>rS.detailsToggleLabel()]),L(`click`,i,()=>rS.toggleDetails()),z(e,t)},o=e=>{var t=hC();CS(M(t),{size:18,label:`Loading provider status`}),T(t),z(e,t)};V(i,e=>{I(n).length>0?e(a):rS.loading&&!rS.loadedOnce&&e(o,1)}),z(e,r),D()}Hr([`click`]);var _C=R(`
`);function vC(e,t){E(t,!0);function n(){zc.fetchUsage(),zc.fetchCacheOverview(``),iS.fetch(),rS.fetch(),aS.fetch(),oS.fetch()}function r(){zc.fetchUsage(),zc.fetchCacheOverview(``),iS.fetch()}function i(){r(),oS.fetch()}An(()=>{if(q.refreshTick,Yo.page===`overview`)return Er(()=>{n(),cb.start()}),()=>{cb.stop(),rS.stopPolling()}});var a=_C(),o=M(a);fb(o,{});var s=P(o,4);nl(M(s),{onchange:i}),T(s);var c=P(s,2);Ic(c,{});var l=P(c,2);hS(l,{});var u=P(l,2);xS(u,{});var d=P(u,2);kS(d,{onintervalchange:r});var f=P(d,2);WS(f,{});var p=P(f,2);QS(p,{}),gC(P(p,2),{}),T(a),z(e,a),D()}var yC=`/admin/live/logs?types=audit,usage`;function bC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function xC(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 SC(e){let t=yC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function CC(){return{async consumeLiveLogsBody(e){await Gy(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=>bC(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.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),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.cacheMergedAuditRecord(u,t),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;ebC(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=>!bC(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},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):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(!bC(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=>!bC(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 wC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},TC=new Set(Object.keys(wC));function EC(e){return String(e&&(e.id||e.request_id)||``).trim()}function DC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:AC(n.data)&&AC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(wC[a]||0)>(wC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&AC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function OC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function kC(e){return TC.has(String(e&&e.eventType||``).trim())}function AC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var jC=200,MC=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(j({}));get auditRecords(){return I(this.#n)}set auditRecords(e){A(this.#n,e,!0)}#r=k(j([]));get auditRecordChanges(){return I(this.#r)}set auditRecordChanges(e){A(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=k(``);get auditSearch(){return I(this.#i)}set auditSearch(e){A(this.#i,e,!0)}#a=k(``);get auditMethod(){return I(this.#a)}set auditMethod(e){A(this.#a,e,!0)}#o=k(``);get auditStatusCode(){return I(this.#o)}set auditStatusCode(e){A(this.#o,e,!0)}#s=k(``);get auditStream(){return I(this.#s)}set auditStream(e){A(this.#s,e,!0)}#c=k(wa(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return I(this.#c)}set auditGroupSessions(e){A(this.#c,e,!0)}#l=k(j({}));get auditThreadChildren(){return I(this.#l)}set auditThreadChildren(e){A(this.#l,e,!0)}#u=k(``);get usageLogSearch(){return I(this.#u)}set usageLogSearch(e){A(this.#u,e,!0)}#d=k(``);get usageFilterModel(){return I(this.#d)}set usageFilterModel(e){A(this.#d,e,!0)}#f=k(``);get usageFilterProvider(){return I(this.#f)}set usageFilterProvider(e){A(this.#f,e,!0)}#p=k(``);get usageFilterLabel(){return I(this.#p)}set usageFilterLabel(e){A(this.#p,e,!0)}#m=k(``);get usageFilterUserPath(){return I(this.#m)}set usageFilterUserPath(e){A(this.#m,e,!0)}#h=k(!1);get usageLogHideCached(){return I(this.#h)}set usageLogHideCached(e){A(this.#h,e,!0)}#g=k(!1);get liveLogsStreaming(){return I(this.#g)}set liveLogsStreaming(e){A(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=EC(e);if(!n)return e;let r=DC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():EC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=jC)return;let t={...this.auditRecords},n=e.length-jC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Yo.page}get customStartDate(){return Nc.customStartDate}get customEndDate(){return Nc.customEndDate}get followsToday(){return Nc.followsToday}liveLogsEnabled(){return Cs.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await Cs.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=SC(this.liveLogsLastSeq),r=q.generation;try{let i=await gs(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 vs(`/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(MC.prototype,CC());var NC=new MC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!NC.liveLogsController,NC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&NC.ensureLiveLogs()})}var PC=null;Mn(()=>{An(()=>{let e=q.refreshTick;if(PC===null){PC=e;return}e!==PC&&(PC=e,Er(()=>{NC.stopLiveLogs(),NC.startLiveLogs()}))})});function FC(){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 IC(){return{entries:[],total:0,limit:50,offset:0}}function LC(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 RC({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 zC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function BC(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 VC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function HC(e,t,n){let r=BC(e,t);return r<=0?``:n?sc(r)+` cached requests hidden`:sc(Number(e&&e.total_requests||0))+` to providers + `+sc(r)+` from cache`}function UC(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:cc(t.total_input_cost)+` input + `+cc(t.total_output_cost)+` output`}function WC(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function GC(e){return WC(e)>0}function KC(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function qC(){return`Estimated at 4 net characters removed per token`}function JC(e,t){return t===`costs`?cc(KC(e)):dc(WC(e))}function YC(e,t){let n=t===`costs`,r=n?Number(KC(e)):WC(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 XC(e,t){let n=YC(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function ZC(e,t){let n=WC(e);if(n<=0)return``;let r=[sc(n)+` estimated prompt token-transmissions removed across provider requests`,qC(),`Savings are summed per provider request; resent conversation history is counted again`],i=KC(e);i!=null&&(r.push(cc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=XC(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` -`)}function QC(e){return String(e&&e.cost_source||``).trim()}function $C(e){let t=QC(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function ew(e){switch(QC(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 tw(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function nw(e){let t=tw(e);return t===`exact`||t===`semantic`}function rw(e){let t=tw(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function iw(e,t){let n=t?String(t):``;return nw(e)?n?`Saved by cache — not charged -`+n:`Saved by cache — not charged`:n}function aw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function ow(e){return Number(e&&e.cached_input_tokens||0)>0}function sw(e){return ow(e)?(aw(e)*100).toFixed(1)+`%`:``}function cw(e){if(!ow(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=[sc(t)+` cached / `+sc(i)+` input tokens`];return r>0&&a.push(sc(r)+` cache write`),a.join(` -`)}function lw(e){let t=[];if(ew(e)&&(t.push(ew(e)),t.push(``)),t.push(`Input: `+cc(e.input_cost)),t.push(`Output: `+cc(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):sc(r);t.push(e+`: `+i)}}return t.join(` -`)}function uw(e){return Array.isArray(e&&e.labels)?e.labels:[]}function dw(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>uw(e).length>0)}function fw(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function pw(e,t){return t?e.total_cost||0:fw(e)}function mw(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):pw(n,t)-pw(e,t))}function hw(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 gw(e){return(e||`chart`)===`chart`||e===`stacked`}function _w(e,t,n){let r=mw(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 vw(e){return Math.max(200,e*32+72)}var yw=new class{#e=k(`tokens`);get usageMode(){return I(this.#e)}set usageMode(e){A(this.#e,e,!0)}get usageFilterModel(){return NC.usageFilterModel}set usageFilterModel(e){NC.usageFilterModel=e}get usageFilterProvider(){return NC.usageFilterProvider}set usageFilterProvider(e){NC.usageFilterProvider=e}get usageFilterLabel(){return NC.usageFilterLabel}set usageFilterLabel(e){NC.usageFilterLabel=e}get usageFilterUserPath(){return NC.usageFilterUserPath}set usageFilterUserPath(e){NC.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(FC()));get usageSummary(){return I(this.#n)}set usageSummary(e){A(this.#n,e,!0)}#r=k(j(FC()));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 NC.usageLog}set usageLog(e){NC.usageLog=e}get usageLogSearch(){return NC.usageLogSearch}set usageLogSearch(e){NC.usageLogSearch=e}get usageLogHideCached(){return NC.usageLogHideCached}set usageLogHideCached(e){NC.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 LC({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,Yo.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 zC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return zC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return zC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await Cs.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];zc.cacheAnalyticsEnabled()&&e.push(zc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Nc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([vs(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),vs(`/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=FC(),this.usageSummaryAll=FC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:FC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:FC()}catch(e){if(bs(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=FC(),this.usageSummaryAll=FC()}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 vs(t+`?`+Nc.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=>_c(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(bs(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 vs(t+`?`+Nc.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(bs(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=Nc.queryStr()+this.filterQueryStr();n+=RC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await vs(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=IC();return}let i=r.data&&typeof r.data==`object`?r.data:IC();i.entries||=[],this.usageLog=i}catch(e){if(bs(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=IC()}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))}};NC.fetchUsage=()=>{Yo.page===`usage`&&yw.fetchUsagePage()};var bw=R(`
`);function xw(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=bw(),l=M(c);K(l,{get icon(){return yo},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 Sw(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 Cw=R(``),ww=R(``),Tw=R(`
`);function Ew(e,t){E(t,!0);let n=Sw(()=>yw.onUsageFilterChanged());An(()=>n.cancel);var r=Tw(),i=M(r),a=M(i);a.value=a.__value=``,H(P(a),16,()=>yw.usageFilterModelOptions(),e=>e,(e,t)=>{var n=Cw(),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,()=>yw.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=Cw(),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=ww(),n=M(t);n.value=n.__value=``,H(P(n),16,()=>yw.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=Cw(),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,()=>yw.onUsageFilterChanged()),Gi(t,()=>yw.usageFilterLabel,e=>yw.usageFilterLabel=e),z(e,t)},u=O(()=>yw.usageFilterLabelOptions().length>0);V(c,e=>{I(u)&&e(l)}),xw(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 yw.usageFilterUserPath},set value(e){yw.usageFilterUserPath=e}}),T(r),L(`change`,i,()=>yw.onUsageFilterChanged()),Gi(i,()=>yw.usageFilterModel,e=>yw.usageFilterModel=e),L(`change`,o,()=>yw.onUsageFilterChanged()),Gi(o,()=>yw.usageFilterProvider,e=>yw.usageFilterProvider=e),z(e,r),D()}Hr([`change`]);var Dw=R(`
Cache Saved
Cache Hits
`,1);function Ow(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=Dw(),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)},[()=>cc(zc.cacheOverview.summary.total_saved_cost),()=>sc(zc.cacheOverview.summary.total_hits)]),z(e,t)},a=O(()=>zc.cacheAnalyticsEnabled());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}var kw=R(` `),Aw=R(`
Pro Saved
`),jw=R(`
Total Requests
Estimated Cost
`);function Mw(e,t){E(t,!0);let n=O(()=>GC(yw.usageSummary)),r=O(()=>JC(yw.usageSummary,yw.usageMode)),i=O(()=>XC(yw.usageSummary,yw.usageMode));var a=jw(),o=M(a),s=P(M(o),2),c=M(s),l=e=>{CS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Zr();F(e=>B(t,e),[()=>sc(VC(yw.usageSummary,yw.usageSummaryAll,yw.usageLogHideCached))]),z(e,t)};V(c,e=>{yw.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=>{CS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Zr();F(e=>B(t,e),[()=>cc(yw.usageSummary.total_cost)]),z(e,t)};V(p,e=>{yw.summaryLoading?e(m):e(h,-1)}),T(f),T(d);var g=P(d,2),_=e=>{var t=Aw(),n=P(M(t),2),a=M(n),o=M(a,!0);T(a);var s=P(a,2),c=e=>{var t=kw(),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))},[()=>ZC(yw.usageSummary,yw.usageMode)]),z(e,t)};V(g,e=>{I(n)&&e(_)}),Ow(P(g,2),{}),T(a),F((e,t)=>{W(s,`title`,e),W(f,`title`,t)},[()=>HC(yw.usageSummary,yw.usageSummaryAll,yw.usageLogHideCached),()=>UC(yw.usageSummary)]),z(e,a),D()}function Nw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):dc(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:Ry(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Ry(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:zy(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 Pw=R(`
`),Fw=R(`

`),Iw=R(`

`,1),Lw=R(`
`),Rw=R(`Model Provider`,1),zw=R(`User Path`),Bw=R(`Label Requests`,1),Vw=R(` `,1),Hw=R(` `),Uw=R(` `,1),Ww=R(` `),Gw=R(`
Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
`),Kw=R(`
`),qw=R(`
`);function Jw(e,t){E(t,!0);let n=e=>{var n=Pw(),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,()=>yw.toggleUsageChartView(t.kind,`chart`)),L(`click`,o,()=>yw.toggleUsageChartView(t.kind,`stacked`)),L(`click`,l,()=>yw.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=>yc(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`?yw.modelUsage:t.kind===`userPath`?yw.userPathUsage:yw.labelUsage),c=O(()=>t.kind===`model`?yw.modelUsageView:t.kind===`userPath`?yw.userPathUsageView:yw.labelUsageView),l=O(()=>t.kind===`model`?yw.modelUsageLoading:t.kind===`userPath`?yw.userPathUsageLoading:yw.labelUsageLoading),u=O(()=>yw.usageMode===`costs`),d=O(()=>t.kind===`userPath`?hw(I(s)):I(s).length>0),f=O(()=>I(u)?I(i).costsTitle:I(i).tokensTitle),p=O(()=>_w(I(s),I(a),I(u))),m=O(()=>mw(I(s),I(u)));function h(){return gw(I(c))?Nw(Ly(),I(p).labels,I(p),{stacked:I(c)===`stacked`,costs:I(u),resolve:By}):null}var g=Qr(),_=N(g),v=e=>{var r=Kw(),a=M(r),s=M(a),u=e=>{JS(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=Fw(),n=M(t,!0);T(t),F(()=>B(n,I(f))),z(e,t)},extra:e=>{var t=Qr(),n=N(t),r=e=>{CS(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=Iw(),n=N(t),r=M(n,!0);T(n);var a=P(n,2),o=e=>{CS(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=Lw();let n;My(M(t),{build:h}),T(t),F(e=>n=Hi(t,``,n,e),[()=>({height:`${vw(I(p).labels.length)??``}px`})]),z(e,t)},y=O(()=>gw(I(c))),b=e=>{var n=Gw(),r=M(n),i=M(r),a=M(i),s=M(a),c=e=>{var t=Rw();Ue(2),z(e,t)},l=e=>{z(e,zw())},u=e=>{var t=Bw();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=Ww(),i=M(r),a=e=>{var t=Vw(),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)},[()=>_c(I(n))||`-`]),z(e,t)},o=e=>{var t=Hw(),r=M(t,!0);T(t),F(()=>B(r,I(n).user_path||`/`)),z(e,t)},s=e=>{var t=Uw(),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:yw.usageFilterLabel===I(n).label}),Hi(i,`--label-color: ${e??``}`),W(i,`title`,t),B(o,I(n).label),B(c,r)},[()=>Uy(I(n).label),()=>yw.usageLabelChipTitle(I(n).label),()=>sc(I(n).requests)]),L(`click`,i,()=>yw.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)},[()=>sc(I(n).input_tokens),()=>sc(I(n).output_tokens),()=>I(n).cached_input_cost==null?``:`~`+cc(I(n).cached_input_cost)+` at current cached-input pricing`,()=>sc(I(n).cached_input_tokens||0),()=>sc(I(n).local_cached_input_tokens||0),()=>sc(I(n).local_cached_output_tokens||0),()=>sc((I(n).local_cached_input_tokens||0)+(I(n).local_cached_output_tokens||0)),()=>sc(fw(I(n))),()=>cc(I(n).input_cost),()=>cc(I(n).output_cost),()=>cc(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=qw();CS(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 Yw=R(``);function Xw(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=Yw(),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 Zw=(e,t=f)=>{var n=Qr(),r=N(n),i=e=>{var n=$w();H(n,20,()=>uw(t()),e=>e,(e,t)=>{var n=Qw();let r;var i=M(n,!0);T(n),F((e,a)=>{r=U(n,1,`usage-label-chip`,null,r,{active:yw.usageFilterLabel===t}),Hi(n,`--label-color: ${e??``}`),W(n,`title`,a),B(i,t)},[()=>Uy(t),()=>yw.usageLabelChipTitle(t)]),L(`click`,n,()=>yw.toggleUsageLabelFilter(t)),z(e,n)}),T(n),z(e,n)},a=O(()=>uw(t()).length>0),o=e=>{z(e,eT())};V(r,e=>{I(a)?e(i):e(o,-1)}),z(e,n)},Qw=R(``),$w=R(`
`),eT=R(`-`),tT=R(`Labels`),nT=R(`Cost`),rT=R(``),iT=R(` `),aT=R(``),oT=R(` `),sT=R(` `),cT=R(`
TimestampProviderModelUser PathCacheProvider Cache
`),lT=R(`
`),uT=R(`
`),dT=R(`

Request Log

`);function fT(e,t){E(t,!0);let n=O(()=>yw.usageMode===`costs`),r=O(()=>dw(yw.labelUsage,yw.usageFilterLabel,yw.usageLog.entries)),i=Sw(()=>yw.fetchUsageLog(!0));An(()=>i.cancel);var a=dT(),o=P(M(a),2),s=M(o);xw(M(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return yw.usageLogSearch},set value(e){yw.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=cT(),i=M(t),a=M(i),o=M(a),s=P(M(o),4),c=e=>{z(e,tT())};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,nT())};V(h,e=>{I(n)||e(g)}),T(o),T(a);var _=P(a);H(_,21,()=>yw.usageLog.entries,e=>e.id,(e,t)=>{var i=sT();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=rT();Zw(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=iT(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>sw(I(t))]),z(e,n)},S=O(()=>ow(I(t))),C=e=>{z(e,eT())};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(()=>ew(I(t)));K(e,{get icon(){return Ja},class:`cost-source-icon`,get title(){return I(n)}})}},ce=O(()=>I(n)&&$C(I(t)));V(oe,e=>{I(ce)&&e(se)});var le=P(oe,2),ue=e=>{K(e,{get icon(){return Za},class:`cache-savings-icon`})},de=O(()=>I(n)&&nw(I(t)));V(le,e=>{I(de)&&e(ue)});var fe=P(le,2),pe=e=>{var n=aT();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=oT(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{{let n=O(()=>ew(I(t)));K(e,{get icon(){return Ja},class:`cost-source-icon`,get title(){return I(n)}})}},s=O(()=>$C(I(t)));V(a,e=>{I(s)&&e(o)});var c=P(a,2),l=e=>{K(e,{get icon(){return Za},class:`cache-savings-icon`})},u=O(()=>nw(I(t)));V(c,e=>{I(u)&&e(l)});var d=P(c,2),f=e=>{var n=aT();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)},[()=>iw(I(t),lw(I(t))),()=>cc(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":nw(I(t))}),()=>hc(I(t).timestamp),()=>fs.formatTimestamp(I(t).timestamp),()=>_c(I(t))||`-`,()=>rw(I(t)),()=>cw(I(t)),()=>I(n)?sc(I(t).input_tokens)+` tokens`:``,()=>I(n)?cc(I(t).input_cost):sc(I(t).input_tokens),()=>I(n)?sc(I(t).output_tokens)+` tokens`:``,()=>I(n)?cc(I(t).output_cost):sc(I(t).output_tokens),()=>I(n)?iw(I(t),``):``,()=>I(n)?iw(I(t),sc(I(t).total_tokens)+` tokens -`+lw(I(t))):``,()=>I(n)?cc(I(t).total_cost):sc(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=lT();CS(M(t),{size:20,label:`Loading request log`}),T(t),z(e,t)},m=e=>{var t=uT();ES(M(t),{}),T(t),z(e,t)};V(d,e=>{yw.usageLog.entries.length>0?e(f):yw.usageLogLoading?e(p,1):e(m,-1)}),Xw(P(d,2),{get total(){return yw.usageLog.total},get offset(){return yw.usageLog.offset},get limit(){return yw.usageLog.limit},onprev:()=>yw.usageLogPrevPage(),onnext:()=>yw.usageLogNextPage()}),T(a),L(`change`,u,()=>yw.fetchUsageLog(!0)),fa(u,()=>yw.usageLogHideCached,e=>yw.usageLogHideCached=e),z(e,a),D()}Hr([`click`,`change`]);var pT=R(`
`);function mT(e,t){E(t,!0);let n=`usage`;An(()=>{q.refreshTick,Yo.page===n&&(yw.fetchUsagePage(),NC.ensureLiveLogs())}),An(()=>{Yo.page===n&&(yw.usageMode=Yo.sub===`costs`?`costs`:`tokens`)});var r=pT(),i=P(M(r),2),a=M(i);Fy(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return yw.usageMode},onchange:e=>yw.toggleUsageMode(e)}),nl(P(a,2),{onchange:()=>yw.fetchUsagePage()}),T(i);var o=P(i,2);Ew(o,{});var s=P(o,2);Mw(s,{});var c=P(s,2),l=M(c);Jw(l,{kind:`model`});var u=P(l,2);Jw(u,{kind:`userPath`}),Jw(P(u,2),{kind:`label`}),T(c),fT(P(c,2),{}),T(r),z(e,r),D()}var hT=R(`
`);function gT(e,t){let n=G(t,`label`,3,`Loading...`),r=G(t,`class`,3,``);var i=hT(),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 _T=R(``);function vT(e,t){let n=G(t,`label`,3,``),r=G(t,`class`,3,``),i=G(t,`disabled`,3,!1);var a=_T();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 yT(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 vs(e,{...a||{},label:t})}catch(e){return bs(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?``:ps(o.data,n),result:o}}async function bT(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 ys(e,t,n,{...s||{},label:r})}catch(e){return bs(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.`:ps(c.data,i),result:c}}function xT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function ST(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 CT(){return[`user_path`,`label`].map(e=>({value:e,label:ST(e).label}))}function wT(e){return String(e&&e.scope||``).trim()||`user_path`}function TT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function ET(e){return ST(wT(e)).chip}function DT(e){return wT(e)===`label`?`budget-label`:`budget-user-path`}function OT(e){return ST(String(e&&e.scope||``)).fieldLabel}function kT(e){return ST(String(e&&e.scope||``)).placeholder}function AT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function jT(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function MT(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 NT(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 PT(e){return wT(e)+`:`+TT(e)+`:`+String(e&&e.period_seconds||``)}function FT(e,t){if(!t||!Array.isArray(e))return null;let n=PT(t);return e.find(e=>PT(e)===n)||null}function IT(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 LT(e){if(IT(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 RT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function zT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function BT(e){let t=Number(e&&e.period_seconds||0);return[TT(e),ET(e),rE(e),NT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var VT={user_path:0,label:1};function HT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(VT[wT(e)]||0)-(VT[wT(t)]||0),i=TT(e).localeCompare(TT(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 UT(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return HT(i?r.filter(e=>BT(e).includes(i)):r.slice(),n)}function WT(e){let t=e||{},n=wT(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=IT(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=MT(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`?LT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function GT(e){return{scope:wT(e),subject:TT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function KT(e){return{scope:wT(e),subject:TT(e),budget_key:{period_seconds:e.period_seconds}}}function qT(e){return{scope:wT(e),subject:TT(e),period_seconds:e.period_seconds}}function JT(e){return cc(e)}function YT(e,t){let n=e||{},r=t||{};return`A budget for "`+((TT(n)||TT(r))+` `+rE({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+JT(r.amount)+` limit with `+JT(n.amount)+`.`}function XT(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function ZT(e,t){let n=XT(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function QT(e){return XT(e&&e.usage_ratio)}function $T(e){return ZT(QT(e),!0)}function eE(e){return ZT(e&&e.period_ratio,!0)}function tE(e){return ZT(QT(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function nE(e){return eE(e).toFixed(1).replace(/\.0$/,``)+`%`}function rE(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 iE(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 aE(e){return iE(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function oE(e){return iE(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function sE(e){switch(Number(e&&e.period_seconds||0)){case 3600:return Ya;case 86400:return Oo;case 604800:return Ra;case 2592e3:return za;default:return So}}function cE(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function lE(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 cE(t)}}function uE(e){return String(e&&e.source||``).trim()||`manual`}function dE(e){let t=uE(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function fE(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?cc(Math.abs(t))+` over`:cc(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(xT()));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 Cs.budgetsVisible()}filteredBudgets(){return UT(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await Cs.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 yT(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:zT});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:wT(e),subject:TT(e),period:NT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=xT();this.formOpen=!0}syncPeriodSeconds(){let e=MT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):RT(e)}syncScope(){AT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=xT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=WT(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=FT(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 bT(`/admin/budgets`,`PUT`,GT(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(),J.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=PT(e);if(this.resettingKey===t)return;let n=TT(e)+` `+rE(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await bT(`/admin/budgets/reset-one`,`POST`,qT(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,J.error(r.error);return}if(r.status===`error`){J.error(r.error);return}J.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=PT(e);if(this.deletingKey===t)return;let n=TT(e)+` `+rE(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await bT(`/admin/budgets`,`DELETE`,KT(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,J.error(r.error);return}if(r.status===`error`){J.error(r.error);return}this.budgets=zT(r.result.data),J.success(`Budget deleted.`)}}openResetDialog(){zs.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:_o,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await bT(`/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`){zs.error=e.error;return}zs.close(),J.success(`Budgets reset.`),Yo.page===`budgets`&&this.fetchBudgets()}}},pE=R(` Edit`,1),mE=R(` `,1),hE=R(`
Usage
Period
`),gE=R(`
`);function _E(e,t){E(t,!0);let n=G(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=fs.formatTimestamp(e);return!t||t===`-`?``:t+` `+fs.effectiveTimeZoneLabel()}var i=gE();H(i,21,n,e=>PT(e),(e,t)=>{var n=hE(),i=M(n),a=M(i),o=M(a),s=M(o),c=e=>{K(e,{get icon(){return ko},class:`budget-scope-icon`})},l=O(()=>wT(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(()=>sE(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);vT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>Y.openForm(I(t)),children:(e,t)=>{var n=pE();K(N(n),{get icon(){return fo},class:`budget-action-icon`}),Ue(2),z(e,n)},$$slots:{default:!0}});var S=P(x,2);{let e=O(()=>Y.resettingKey===PT(I(t))?`Resetting budget`:`Reset budget`),n=O(()=>Y.resettingKey===PT(I(t)));vT(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=mE(),i=N(r);K(i,{get icon(){return _o},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.resettingKey===PT(I(t))?`Resetting`:`Reset`]),z(e,r)},$$slots:{default:!0}})}var C=P(S,2);{let e=O(()=>Y.deletingKey===PT(I(t))?`Deleting budget`:`Delete budget`),n=O(()=>Y.deletingKey===PT(I(t)));vT(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=mE(),i=N(r);K(i,{get icon(){return jo},class:`budget-action-icon`});var a=P(i,2),o=M(a,!0);T(a),F(e=>B(o,e),[()=>Y.deletingKey===PT(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)},[()=>DT(I(t)),()=>wT(I(t))===`label`?`--label-color: `+Uy(TT(I(t))):void 0,()=>ET(I(t))+`: `+TT(I(t)),()=>TT(I(t)),()=>iE(I(t)),()=>rE(I(t)),()=>dE(I(t)),()=>uE(I(t)),()=>tE(I(t)),()=>$T(I(t)),()=>`Budget usage: `+cc(I(t).spent)+` of `+cc(I(t).amount)+`, `+fE(I(t)),()=>$T(I(t)),()=>({"budget-bar-fill-danger":QT(I(t))>=1}),()=>cc(I(t).spent)+` of `+cc(I(t).amount),()=>fE(I(t)),()=>cc(I(t).spent)+` of `+cc(I(t).amount),()=>fE(I(t)),()=>nE(I(t)),()=>oE(I(t)),()=>eE(I(t)),()=>eE(I(t)),()=>aE(I(t)),()=>r(I(t).period_start),()=>fs.formatTimestamp(I(t).period_start),()=>lE(I(t)),()=>r(I(t).period_end),()=>fs.formatTimestamp(I(t).period_end),()=>fs.formatTimestamp(I(t).period_start),()=>lE(I(t)),()=>fs.formatTimestamp(I(t).period_end)]),z(e,n)}),T(i),z(e,i),D()}var vE=R(`

`,1),yE=R(``),bE=R(``),xE=R(`
`);function SE(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,vo),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?.()}Ps(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=xE(),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=vE(),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());As(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=yE(),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=bE();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 CE=R(`
`);function wE(e,t){let n=G(t,`label`,3,``);var r=CE(),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 TE=R(``),EE=R(``),DE=R(``),OE=R(``),kE=R(``),AE=R(``),jE=R(`

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

`),ME=R(`
`,1),NE=R(``),PE=R(` `,1);function FE(e,t){E(t,!0);function n(e){Y.setFormSubject(e.target.value),e.target.value=Y.form.subject}var r=PE(),i=N(r);{let e=O(()=>Y.editing?`Edit Budget`:`Create Budget`);SE(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=ME(),i=N(r),a=M(i);wE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=EE();H(n,21,CT,e=>e.value,(e,t)=>{var n=TE(),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(()=>OT(Y.form));wE(o,{id:`budget-subject`,get label(){return I(e)},children:(e,t)=>{var r=DE();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)},[()=>kT(Y.form)]),L(`input`,r,n),z(e,r)},$$slots:{default:!0}})}var s=P(o,2);wE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=OE();H(n,21,jT,e=>e.value,(e,t)=>{var n=TE(),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=>{wE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=kE();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)}),wE(P(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=AE();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,jE())};V(u,e=>{Y.editing&&e(d)}),z(e,r)},$$slots:{default:!0}})}Ps(P(i,2),{get open(){return Y.overrideDialogOpen},variant:`auth`,onclose:()=>Y.closeOverrideDialog(),children:(e,t)=>{var n=NE(),r=M(n);As(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 vo},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`)},[()=>YT(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 IE=R(`

Budgets

`),LE=R(``),RE=R(`
Budget management is unavailable.
`),zE=R(``),BE=R(`
`),VE=R(`

No budgets configured yet.

`),HE=R(`

No budgets match your filter.

`),UE=R(`
`);function WE(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`budgets`&&Y.fetchBudgetsPage()});let n=O(()=>Y.filteredBudgets());var r=UE(),i=M(r),a=M(i);JS(M(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{z(e,IE())},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=LE();K(M(t),{get icon(){return mo},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);Ic(u,{});var d=P(u,2),f=e=>{z(e,RE())},p=O(()=>(!Y.managementEnabled()||!Y.budgetsAvailable)&&!q.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=zE(),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=>{gT(e,{label:`Loading budgets...`})};V(g,e=>{Y.loading&&!q.authError&&e(_)});var v=P(g,2),y=e=>{var t=BE(),n=M(t);xw(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);FE(b,{});var x=P(b,2),S=e=>{_E(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,VE())},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,HE())},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 GE(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function KE(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 qE(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:KE(e).label}))}function JE(e){return String(e&&e.scope||``).trim()||`user_path`}function YE(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function XE(e){return KE(JE(e)).chip}function ZE(e){return KE(String(e&&e.scope||``)).fieldLabel}function QE(e){return KE(String(e&&e.scope||``)).placeholder}function $E(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function eD(){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 tD(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 nD(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 rD(e){let t=String(e&&e.period||``).trim(),n=tD(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function iD(e){return JE(e)+`:`+YE(e)+`:`+String(e&&e.period_seconds||`0`)}function aD(e){return Number(e&&e.period_seconds||0)===0}function oD(e){return String(e&&e.period_label||``).trim()||nD(Number(e&&e.period_seconds||0))}function sD(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function cD(e){return String(e&&e.source||``)===`config`}function lD(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function uD(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 dD(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[JE(e)]||0)-(i[JE(t)]||0);if(n!==0)return n;let r=YE(e).localeCompare(YE(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=YE(e).toLowerCase(),r=XE(e).toLowerCase(),i=oD(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function fD(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function pD(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 mD(e,t){return e?pD(t.scope,t.subject,t.limit_key.period_seconds)!==pD(e.scope,e.subject,e.period_seconds):!1}function hD(e){let t=e||{},n=String(t.scope||`user_path`),r=String(t.subject||``).trim();if(n!==`user_path`&&!r)return{error:ZE(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 gD(e,t,n){if(JE(e)!==`model`)return!1;let r=String(YE(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 _D(e,t){return JE(e)===`provider`&&String(YE(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function vD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function yD(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:vD(n),hint:``,items:r.filter(e=>gD(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=>_D(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=>JE(e)===`user_path`&&YE(e)===`/`)}),i}function bD(e){return aD(e)?uD(e.in_flight,e.max_requests):Math.max(uD(e.requests_used,e.max_requests),uD(e.tokens_used,e.max_tokens))}function xD(e){return`--rate-limit-pressure: `+bD(e)+`%`}function SD(e){let t=bD(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 CD(e){return(Array.isArray(e)?e:[]).some(e=>JE(e)===`user_path`&&YE(e)===`/`)}function wD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>gD(e,t,n))?`table-action-btn-active`:r.some(e=>_D(e,t))||CD(r)?`rate-limit-gauge-inherited`:``}function TD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>_D(e,t))?`table-action-btn-active`:CD(n)?`rate-limit-gauge-inherited`:``}function ED(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 DD(e){if(aD(e))return lD(e.in_flight)+` of `+lD(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(lD(e.requests_used)+`/`+lD(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(lD(e.tokens_used)+`/`+lD(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(GE()));get rateLimitForm(){return I(this.#p)}set rateLimitForm(e){A(this.#p,e,!0)}rateLimitsEnabled(){return Cs.rateLimitsVisible()}defaultRateLimitForm(){return GE()}rateLimitScopeMeta(e){return KE(e)}rateLimitScopeOptions(){return qE()}rateLimitScope(e){return JE(e)}rateLimitSubject(e){return YE(e)}rateLimitScopeLabel(e){return XE(e)}rateLimitSubjectFieldLabel(){return ZE(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return QE(this.rateLimitForm)}syncRateLimitScope(){$E(this.rateLimitForm)}rateLimitPeriodOptions(){return eD()}rateLimitPeriodSeconds(e){return tD(e)}rateLimitPeriodFromSeconds(e){return nD(e)}syncRateLimitPeriodSeconds(){rD(this.rateLimitForm)}rateLimitKey(e){return iD(e)}rateLimitIsConcurrent(e){return aD(e)}rateLimitPeriodLabel(e){return oD(e)}rateLimitSourceLabel(e){return sD(e)}rateLimitIsReadOnly(e){return cD(e)}formatRateLimitNumber(e){return lD(e)}rateLimitUsagePercent(e,t){return uD(e,t)}filteredRateLimits(){return dD(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return fD(e)}async fetchRateLimitsPage(){if(await Cs.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 yT(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:fD});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:JE(e),subject:YE(e),period_seconds:t},this.rateLimitForm={scope:JE(e),subject:YE(e),period:nD(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=GE();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=GE(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return pD(e,t,n)}rateLimitIdentityMoved(e){return mD(this.rateLimitEditingOriginal,e)}setRateLimitFormSubject(e){this.rateLimitForm.subject=String(e||``)}rateLimitFormPayload(){return hD(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 bT(`/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=fD(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),J.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await bT(`/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=fD(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=iD(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await bT(`/admin/rate-limits`,`DELETE`,{scope:JE(e),subject:YE(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`){J.error(n.error);return}this.rateLimits=fD(n.result.data),J.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=iD(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await bT(`/admin/rate-limits/reset-one`,`POST`,{scope:JE(e),subject:YE(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`){J.error(n.error);return}this.rateLimits=fD(n.result.data),J.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 gD(e,t,n)}rateLimitRuleMatchesProvider(e,t){return _D(e,t)}rateLimitInspectorQualifiedModel(){return vD(this.rateLimitInspector)}rateLimitInspectorSections(){return yD(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return bD(e)}rateLimitPressureStyle(e){return xD(e)}rateLimitPressureClass(e){return SD(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,()=>wD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>TD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>CD(e))}rateLimitGaugeTitle(e,t){return ED(e,t)}rateLimitInspectorSummary(e){return DD(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)}},OD=R(``),kD=R(``),AD=R(``),jD=R(``),MD=R(``),ND=R(``),PD=R(``),FD=R(`

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

`),ID=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 LD(e,t){E(t,!0);{let t=O(()=>X.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);SE(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=ID(),r=N(n),i=M(r);wE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=kD();H(n,21,()=>X.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=OD(),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());wE(a,{id:`rate-limit-subject`,get label(){return I(e)},children:(e,t)=>{var n=AD();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);wE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=jD();H(n,21,()=>X.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=OD(),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=>{wE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=MD();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`);wE(l,{id:`rate-limit-max-requests`,get label(){return I(e)},children:(e,t)=>{var n=ND();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=>{wE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=PD();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,FD())};V(f,e=>{X.rateLimitEditing&&e(p)}),z(e,n)},$$slots:{default:!0}})}D()}Hr([`change`,`input`]);var RD=R(` `),zD=R(` Edit`,1),BD=R(` `,1),VD=R(`
In-flight
`),HD=R(`
Requests
`),UD=R(`
Tokens
`),WD=R(`
`),GD=R(`
`);function KD(e,t){E(t,!0);var n=GD();H(n,21,()=>t.rules,e=>X.rateLimitKey(e),(e,t)=>{var n=WD(),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=RD(),r=M(n);{let e=O(()=>X.rateLimitScope(I(t))===`provider`?xo:Ia);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))?ja:Ao);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=>{vT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitForm(I(t)),children:(e,t)=>{var n=zD();K(N(n),{get icon(){return fo},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)));vT(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=BD(),i=N(r);K(i,{get icon(){return _o},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)));vT(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=BD(),i=N(r);K(i,{get icon(){return jo},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=VD(),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=HD(),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=UD(),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 qD=R(`

Rate Limits

`),JD=R(``),YD=R(`
Rate limit management is unavailable.
`),XD=R(``),ZD=R(`
`),QD=R(`

No rate limits configured yet.

`),$D=R(`

No rate limits match your filter.

`),eO=R(`
`);function tO(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`rate-limits`&&X.fetchRateLimitsPage()});let n=O(()=>X.filteredRateLimits());var r=eO(),i=M(r),a=M(i);JS(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,qD())},$$slots:{title:!0}}),T(a);var o=P(a,2),s=M(o),c=e=>{var t=JD();K(M(t),{get icon(){return mo},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);Ic(u,{});var d=P(u,2),f=e=>{z(e,YD())},p=O(()=>(!X.rateLimitsEnabled()||!X.rateLimitsAvailable)&&!q.authError);V(d,e=>{I(p)&&e(f)});var m=P(d,2),h=e=>{var t=XD(),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=>{gT(e,{label:`Loading rate limits...`})};V(g,e=>{X.rateLimitsLoading&&!q.authError&&e(_)});var v=P(g,2),y=e=>{var t=ZD(),n=M(t);xw(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);LD(b,{});var x=P(b,2),S=e=>{KD(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,QD())},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,$D())},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 nO(e){return String(e||``).trim().toLowerCase()}function rO(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 iO(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 aO(e){return iO(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function oO(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 sO(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 cO(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function lO(e,t){let n={model:e},r=cO(t);return r!==null&&(n.weight=r),n}function uO(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(lO(t,e&&e.weight))}return n}function dO(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var fO={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 pO(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:fO[e]||e}))}function mO(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 hO(e){let t=Array.isArray(e)?e:[],n=[],r=[];for(let e of t)!e||typeof e!=`object`||(e.kind===`redirect`?n.push(mO(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 gO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+dO(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function _O(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function vO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function yO(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function bO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:yO(e.user_paths)?`is-restricted`:`is-enabled`}function xO(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 SO({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=nO(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=rO(e),n=null;for(let t of aO(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(nO(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of oO(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:gO(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:_O(e),alias_state_text:vO(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 CO(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 wO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function TO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function EO(e){let t=String(e||``).trim();return t?t+`/`:``}function DO(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 OO(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 kO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function AO(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 jO(e,t,n,r){let i=EO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=OO(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 MO(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:wO(e,n),type_label:TO(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=wO(o.provider_name,o.provider_type),o.type_label=TO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=jO(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:xO(n),item_count_label:DO(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:DO(i)}),o}function NO(e,t){let n=AO(t,`/`),r=kO(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 PO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||rO(e):``}function FO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,_O(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 IO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function LO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function RO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function zO(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 BO(e){return!!(e&&e.override)}function VO(e){return e?`table-action-btn-active`:``}function HO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function UO(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function WO(e){return String(e&&e.target_model||``).trim()!==``}function GO(e){return String(e&&e.target_model||``).trim()?!0:uO(e&&e.targets).length>0}function KO(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function qO(e){return KO(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function JO(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 YO(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:sO(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:sO(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function XO(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function ZO(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=uO(e&&e.targets),o=GO(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:XO(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(lO(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 QO(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:sO(e)})):n.map(e=>lO(sO(e),e.weight))):n.length===1?t.target_model=sO(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function $O(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 ek(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:iSO({models:Pc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:Pc.activeCategory}));get displayModels(){return I(this.#T)}set displayModels(e){A(this.#T,e)}#E=O(()=>MO(this.displayModels,Pc.models,this.modelOverrideViews));get displayModelGroups(){return I(this.#E)}set displayModelGroups(e){A(this.#E,e)}#D=O(()=>CO(this.displayModels,Pc.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!Pc.filter&&t>=this.displayModels.length?this.displayModelGroups:MO(e.slice(0,t),Pc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return I(this.#O)}set filteredDisplayModelGroups(e){A(this.#O,e)}#k=O(()=>NO(Pc.models,this.modelOverrideViews));get globalScopeRow(){return I(this.#k)}set globalScopeRow(e){A(this.#k,e)}modelsBusy(){return!!(Pc.loading||this.modelsRendering)}modelLoadingText(){if(Pc.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=tk(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=ek(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 vs(`/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}=hO(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 rO(e)}findModelOverrideView(e){return AO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=nO(e);if(!t)return null;for(let e of this.aliases)if(nO(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=nO(e);if(!t)return null;for(let e of Pc.models)if(aO(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&&bO(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(zO(e)){J.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=QO(t);try{let e=await ys(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){J.error(e.status===401?`Authentication required.`:ms(e,`Failed to update alias state.`));return}J.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),J.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=PO(e);if(!t)return;let{method:n,payload:r,desired:i}=$O(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await ys(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){J.error(e.status===401?`Authentication required.`:ms(e,`Failed to update model access.`));return}}J.success(i?`Model enabled.`:`Model disabled.`),Promise.all([Pc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),J.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 ys(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,J.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){J.error(t.status===401?`Authentication required.`:ms(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,J.success(e.notice),Promise.all([Pc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),J.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(){JO(this.vmForm)}vmFormHasPrimaryTarget(){return WO(this.vmForm)}vmFormShowStrategy(){return KO(this.vmForm)}vmStrategyOptions(){return pO(Cs.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return qO(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&yO(XO(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=UO()}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=rO(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=kO(Pc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=YO(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=PO(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=kO(Pc.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}=ZO(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=rO(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=rO(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 ys(`/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.`:ms(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),J.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([Pc.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 ys(`/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.`:ms(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),J.success(`Virtual model removed.`),Promise.all([Pc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},rk=[{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 ik(e){let t=rk.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function ak(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function ok(e,t){let n=ak(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of rk)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=ak(r.tiers)),n}function sk(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function ck(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 rk)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=sk(n[e.value]||`model_registry`));return r}function lk(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function uk(e){let t=String(e||``).trim();return t?t+`/`:``}function dk(e){return String(e&&e.model&&e.model.id||``).trim()}function fk(e){let t=String(e&&e.provider_name||``).trim(),n=dk(e);return t&&n?t+`/`+n:n}function pk(e){return dk(e)}function mk(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 hk(e,t){let n=String(t||``).trim();return n&&mk(e).get(n)||null}function gk(e,t,n){let r=mk(e),i=fk(t),a=pk(t),o=uk(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 _k(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=ak(r&&r.pricing),a=ck(r),o=gk(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=lk(o);for(let t of rk)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=ak(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function vk(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of rk)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function yk(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 bk(e,t){let n=yk(e,t&&t.id);return rk.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function xk(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 `+ik(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=ak(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function Sk(e,t,n){let r=e||{},i=t||{},a=n||{},o=ok(r,a);return rk.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 Ck=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 rk}pricingFieldLabel(e){return ik(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await vs(`/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 hk(this.modelPricingOverrideViews,e)}hasGlobalPricingOverride(){return!!this.findModelPricingOverrideView(`/`)}hasProviderPricingOverride(e){return!!this.findModelPricingOverrideView(uk(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(fk(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 _k(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=uk(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=fk(e),n=pk(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=vk(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?ak(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?_k(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 bk(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=yk(this.modelPricingOverrideRows),t=rk.find(t=>!e.has(t.value))||rk[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 xk(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return Sk(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 ys(`/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.`:ms(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),J.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 ys(`/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.`:ms(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),J.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}}}},wk=R(``);function Tk(e,t){E(t,!0);var n=wk();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=nk.rowTogglingKey===t.row.key||!nk.virtualModelsAvailable,W(n,`aria-label`,i),B(a,o)},[()=>({enabled:nk.rowToggleEnabled(t.row),restricted:nk.rowToggleRestricted(t.row)}),()=>nk.rowToggleAriaLabel(t.row),()=>nk.rowToggleLabel(t.row)]),L(`click`,n,()=>nk.toggleRowEnabled(t.row)),z(e,n),D()}Hr([`click`]);var Ek=R(`
`);function Dk(e,t){E(t,!0);var n=Ek(),r=M(n),i=e=>{Tk(e,{get row(){return nk.globalScopeRow}})};V(r,e=>{nk.virtualModelsAvailable&&e(i)});var a=P(r,2),o=e=>{{let t=O(()=>Ck.modelPricingButtonLabel(`global model pricing`,Ck.hasGlobalPricingOverride())),n=O(()=>Ck.modelPricingButtonClass(Ck.hasGlobalPricingOverride()));vT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>Ck.openGlobalPricingOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return Ja},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(a,e=>{Ck.modelPricingOverridesAvailable&&e(o)});var s=P(a,2),c=e=>{{let t=O(()=>HO(`global model access`,nk.hasGlobalModelOverride())),n=O(()=>VO(nk.hasGlobalModelOverride()));vT(e,{get label(){return I(t)},get class(){return`table-icon-btn ${I(n)??``}`},onclick:()=>nk.openGlobalModelOverrideEdit(),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{nk.virtualModelsAvailable&&e(c)}),T(n),z(e,n),D()}function Ok(e){return String(e&&(e.primary_model||e.source)||``).trim()}function kk(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function Ak(e){return Array.isArray(e)?e.map(e=>({...e,source:Ok(e),targets:kk(e)})):[]}function jk(e){let t=kk(e);return t.length===0?`-`:t.join(`, `)}function Mk(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function Nk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>Ok(e)===n)||null}function Pk(e,t){if(!t||t.is_alias)return!1;let n=Nk(e,rO(t));return!!(n&&n.enabled!==!1&&kk(n).length>0)}function Fk(e,t){return Pk(e,t)?`table-action-btn-failover-active`:``}function Ik(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return Pk(e,t)?n+` (active)`:n}function Lk(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 Rk(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 zk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:Lk(e),enabled:!(e&&e.enabled===!1)}}function Bk(e){return Ok(e)}function Vk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=Bk(e);n&&(t[n]=!0)}),t}function Hk(e,t){let n=Bk(t);return!!(n&&e&&e[n])}function Uk(e,t){return(Array.isArray(e)?e:[]).filter(e=>Hk(t,e))}function Wk(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&Uk(n,t).length===n.length}function Gk(e){return[Ok(e),kk(e).join(` `)].join(` `).toLowerCase()}function Kk(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>Gk(e).includes(r)):n}function qk(e){return{primary_model:Ok(e),fallback_models:kk(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function Jk(){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(Jk()));get failoverForm(){return I(this.#m)}set failoverForm(e){A(this.#m,e,!0)}failoverEnabled(){return Cs.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 vs(`/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=Ak(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=Jk()}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 Lk(this.failoverForm)}setFailoverFormTargets(e){let t=Rk(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 zk(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 ys(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}J.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 ys(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}J.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 ys(`/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=Ak(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),J.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(){zs.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:jo,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(zs.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await ys(`/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=Ak(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,J.success(`Dashboard-managed failover mappings removed.`),zs.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 ys(`/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=Ak(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 Bk(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=Vk(e)}failoverDraftSelected(e){return Hk(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return Uk(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return Wk(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 Gk(e)}filteredFailoverDrafts(){return Kk(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return qk(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 ys(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}J.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 jk(e)}failoverPrimaryModel(e){return Ok(e)}failoverTargets(e){return kk(e)}findFailoverMapping(e){return Nk(this.failoverRules,e)}hasActiveFailoverMapping(e){return Pk(this.failoverRules,e)}failoverButtonClass(e){return Fk(this.failoverRules,e)}failoverButtonLabel(e){return Ik(this.failoverRules,e)}normalizeFailoverRules(e){return Ak(e)}failoverRuleStatus(e){return Mk(e)}qualifiedModelName(e){return rO(e)}},Yk=R(``),Xk=R(``),Zk=R(`Config`),Qk=R(`
Targets
`),$k=R(``),eA=R(`
Redirects to
`),tA=R(` `),nA=R(`
`),rA=R(`
`),iA=R(`
`);function aA(e,t){E(t,!0);let n=O(()=>Ck.modelRowPricing(t.row));var r=iA(),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,Yk())};V(l,e=>{t.row.is_alias&&e(u)});var d=P(l,2),f=e=>{z(e,Xk())};V(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=P(d,2),m=e=>{z(e,Zk())},h=O(()=>zO(t.row));V(p,e=>{I(h)&&e(m)}),T(o);var g=P(o,2),_=e=>{var n=Qk(),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=eA(),r=P(M(n)),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=$k();F(e=>{W(n,`aria-label`,nk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),W(n,`title`,nk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!nk.rowDeletingKey]),L(`click`,n,()=>nk.removeRedirectRow(t.row)),z(e,n)},s=O(()=>nk.virtualModelsAvailable&&LO(t.row));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>gO(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=tA(),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=nA(),r=M(n);Tk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>nk.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=O(()=>!!nk.rowDeletingKey);vT(e,{get label(){return I(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>nk.removeAliasRow(t.row),get disabled(){return I(r)},children:(e,t)=>{K(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=O(()=>nk.virtualModelsAvailable&&IO(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);vT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>nk.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(s,e=>{nk.virtualModelsAvailable&&e(c)}),T(n),z(e,n)},w=e=>{var n=rA(),r=M(n);Tk(r,{get row(){return t.row}});var i=P(r,2),a=e=>{{let n=O(()=>Ck.modelPricingButtonLabel(`model pricing for `+t.row.display_name,Ck.hasModelPricingOverride(t.row))),r=O(()=>Ck.modelPricingButtonClass(Ck.hasModelPricingOverride(t.row)));vT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>Ck.openModelPricingOverrideEdit(t.row),children:(e,t)=>{K(e,{get icon(){return Ja},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(i,e=>{Ck.modelPricingOverridesAvailable&&e(a)});var o=P(i,2),s=e=>{{let n=O(()=>Z.failoverButtonLabel(t.row)),r=O(()=>Z.failoverButtonClass(t.row));vT(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 Do},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));vT(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 eo},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);vT(e,{get label(){return I(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>nk.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(f,e=>{nk.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=P(f,2),h=e=>{{let n=O(()=>HO(`model access for `+t.row.display_name,BO(t.row.access))),r=O(()=>VO(BO(t.row.access)));vT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>nk.openVirtualModelEditModel(t.row),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(m,e=>{nk.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)},[()=>RO(t.row)||void 0,()=>Fi(FO(t.row))]),z(e,r),D()}Hr([`click`]);var oA={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function sA(e,t){return{headerLines:e,class:`col-price`,value:t}}var cA=sA([`Input / Output ($/MTok)`],(e,t)=>lc(t?.input_per_mtok)+` / `+lc(t?.output_per_mtok)),lA={all:[cA],text_generation:[oA,cA,sA([`Cached $/MTok`],(e,t)=>lc(t?.cached_input_per_mtok))],embedding:[sA([`Input`,`$/MTok`],(e,t)=>lc(t?.input_per_mtok))],image:[sA([`$/Image`],(e,t)=>uc(t?.per_image))],audio:[sA([`$/Second`],(e,t)=>uc(t?.per_second_input)),sA([`$/Character`],(e,t)=>uc(t?.per_character_input))],video:[sA([`$/Second (In)`],(e,t)=>uc(t?.per_second_input)),sA([`$/Second (Out)`],(e,t)=>uc(t?.per_second_output))],utility:[sA([`$/Page`],(e,t)=>uc(t?.per_page)),sA([`$/Request`],(e,t)=>uc(t?.per_request))]};function uA(e){return lA[e]||lA.all}function dA(e){return uA(e).length+2}var fA=R(`
`),pA=R(` `,1),mA=R(``),hA=R(` `),gA=R(` `),_A=R(`
`),vA=R(`
`),yA=R(`
Model
`);function bA(e,t){E(t,!0);let n=O(()=>Pc.activeCategory||`all`),r=O(()=>uA(I(n))),i=O(()=>dA(I(n)));var a=yA(),o=M(a),s=M(o),c=M(s),l=P(M(c));H(l,17,()=>I(r),oi,(e,t)=>{var n=mA();H(n,21,()=>I(t).headerLines,oi,(e,t,n)=>{var r=pA(),i=N(r),a=e=>{z(e,fA())};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);Dk(M(u),{}),T(u),T(c),T(s),H(P(s),17,()=>nk.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=vA(),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=hA(),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=gA(),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=_A(),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=>{Tk(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(()=>Ck.modelPricingButtonLabel(`provider pricing for `+I(t).display_name,Ck.hasProviderPricingOverride(I(t)))),r=O(()=>Ck.modelPricingButtonClass(Ck.hasProviderPricingOverride(I(t))));vT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>Ck.openProviderPricingOverrideEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return Ja},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(x,e=>{Ck.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)));vT(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 eo},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(()=>HO(`provider access for `+I(t).display_name,BO(I(t).access))),r=O(()=>VO(BO(I(t).access)));vT(e,{get label(){return I(n)},get class(){return`table-icon-btn ${I(r)??``}`},onclick:()=>nk.openProviderOverrideEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};V(te,e=>{nk.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)=>{aA(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 xA=R(``);function SA(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=xA();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 CA=R(``),wA=R(`
`);function TA(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=wA(),c=M(s);na(c);var l=P(c,2),u=e=>{var t=CA();na(t),F(()=>t.disabled=nk.vmFormManaged),da(t,r),z(e,t)},d=O(()=>nk.vmFormShowWeights());V(l,e=>{I(d)&&e(u)});var f=P(l,2),p=e=>{vT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return nk.vmFormManaged},children:(e,t)=>{K(e,{get icon(){return jo},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=nk.vmFormManaged}),da(c,n),z(e,s),D()}var EA=R(`

`),DA=R(`adaptive lets the registered routing extension pick the target per - request.`,1),OA=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),kA=R(``),AA=R(`

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

`),jA=R(``),MA=R(``),NA=R(``),PA=R(`
`,1),FA=R(``),IA=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),LA=R(``),RA=R(` `),zA=R(`
Targets
`,1);function BA(e,t){E(t,!0);let n=nk;An(()=>{n.vmFormOpen&&Cs.ensureLoaded()});{let t=e=>{JS(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=EA(),r=M(t,!0);T(t),F(()=>B(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),z(e,t)},help:e=>{Ue();var t=OA(),n=P(N(t),7),r=e=>{var t=DA();Ue(),z(e,t)},i=O(()=>Cs.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=kA();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`?vo:mo);SE(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=zA(),i=N(r),a=e=>{z(e,AA())};V(i,e=>{n.vmFormManaged&&e(a)});var o=P(i,2);wE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=jA();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,()=>Pc.models,e=>rO(e),(e,t)=>{var n=MA(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>rO(I(t)),()=>rO(I(t))]),z(e,n)}),T(s);var c=P(s,2),l=P(M(c),2);{let e=O(()=>n.vmFormHasPrimaryTarget());TA(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)=>{TA(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 mo},class:`form-action-icon`}),Ue(2),T(f),T(d),T(c);var p=P(c,2),m=e=>{var t=PA(),r=N(t);wE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=NA();H(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=MA(),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);JS(_,{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,FA())},help:e=>{Ue();var t=IA();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);wE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=LA();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=RA(),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());SA(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 VA=R(`

Pricing override

`,1),HA=R(``),UA=R(``),WA=R(``),GA=R(``),KA=R(`
`),qA=R(`
Tiered pricing exists for this override and will be preserved. Tier editing can be added - without a database migration.
`),JA=R(`
No pricing fields set.
`),YA=R(`
`),XA=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 ZA(e,t){E(t,!0);let n=Ck;SE(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=VA(),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=HA();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=XA(),i=N(r),a=M(i);wE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=UA();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=>{wE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=GA();H(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=WA(),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=KA(),a=M(i),o=M(a),s=P(o,2);H(s,21,()=>n.availablePricingFieldOptions(I(t)),e=>e.value,(e,t)=>{var n=WA(),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));vT(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 Lo},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 mo},class:`form-action-icon`}),Ue(2),T(u),T(l);var d=P(l,2),f=e=>{z(e,qA())};V(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=P(d,2),m=P(M(p),2),h=e=>{z(e,JA())},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=YA(),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?`-`:uc(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 QA=R(`

Failover mapping

`,1),$A=R(``),ej=R(`

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

`),tj=R(``),nj=R(`
`),rj=R(`
`,1),ij=R(`
`);function aj(e,t){E(t,!0);{let t=e=>{var t=QA(),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=$A();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);SE(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=ij(),r=M(n),i=e=>{z(e,ej())};V(r,e=>{Z.failoverFormManaged&&e(i)});var a=P(r,2);H(a,21,()=>Pc.models,oi,(e,t)=>{var n=tj(),r=M(n,!0);T(n);var i={};F((e,t)=>{B(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>rO(I(t)),()=>rO(I(t))]),z(e,n)}),T(a);var o=P(a,2);wE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=rj(),r=N(n),i=M(r),a=M(i);na(a);var o=P(a,2),s=e=>{vT(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 jo},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=nj(),i=M(r);na(i),vT(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 jo},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 mo},class:`form-action-icon`}),Ue(2),T(l);var u=P(l,2),d=M(u);K(d,{get icon(){return Fo},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);SA(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 oj=R(` `),sj=R(`
`),cj=R(``),lj=R(`
`),uj=R(`

No failover suggestions were generated.

`),dj=R(`

No failover drafts match the filter.

`),fj=R(``),pj=R(``);function mj(e,t){E(t,!0),Ps(e,{get open(){return Z.failoverDraftsOpen},variant:`editor`,onclose:()=>Z.closeFailoverDraftsModal(),children:(e,t)=>{var n=pj(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=oj(),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)}),As(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=>{gT(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=sj(),n=M(t);xw(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 Ha},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=lj();H(t,21,()=>Z.filteredFailoverDrafts(),e=>`failover-draft:`+Z.failoverPrimaryModel(e),(e,t)=>{var n=cj(),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,uj())};V(m,e=>{!Z.failoverGenerating&&Z.failoverGeneratedRules.length===0&&!Z.failoverError&&e(h)});var g=P(m,2),_=e=>{z(e,dj())},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=fj(),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 vo},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 hj=R(`
Rate limit management is unavailable.
`),gj=R(` Add`,1),_j=R(`

`),vj=R(`

No rules.

`),yj=R(` Edit`,1),bj=R(`
`),xj=R(`
`),Sj=R(`

`),Cj=R(``),wj=R(``);function Tj(e,t){E(t,!0);function n(){q.dialogOpen||X.closeRateLimitInspector()}Ps(e,{get open(){return X.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=wj(),r=M(n),i=M(r),a=P(M(i),2),o=M(a),s=M(o,!0);T(o),T(a),T(i),As(P(i,2),{label:`Close rate limits inspector`,onclick:()=>X.closeRateLimitInspector()}),T(r);var c=P(r,2),l=e=>{gT(e,{label:`Loading rate limits...`})},u=e=>{z(e,hj())},d=e=>{var t=Qr();H(N(t),17,()=>X.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Sj(),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());vT(o,{get label(){return I(e)},class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(I(t).scope,I(t).subject),children:(e,t)=>{var n=gj();K(N(n),{get icon(){return mo},class:`table-icon-svg`}),Ue(2),z(e,n)},$$slots:{default:!0}})}T(r);var s=P(r,2),c=e=>{var n=_j(),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,vj())},d=e=>{var n=xj();H(n,21,()=>I(t).items,e=>X.rateLimitKey(e),(e,t)=>{var n=bj(),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))?ja:Ao);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=>{vT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>X.openRateLimitFormFromInspector(null,null,I(t)),children:(e,t)=>{var n=yj();K(N(n),{get icon(){return fo},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=Cj();L(`click`,t,()=>{X.closeRateLimitInspector(),Yo.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 Ej=R(`
models
`),Dj=R(`
Virtual models feature is unavailable.
`),Oj=R(`
`),kj=R(``),Aj=R(`
`),jj=R(``),Mj=R(`
`),Nj=R(`

No models registered.

`),Pj=R(`

No models in this category.

`),Fj=R(`

No models match your filter.

`),Ij=R(`
`);function Lj(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`models`&&(nk.fetchVirtualModels(),Ck.fetchModelPricingOverrides(),Z.fetchFailoverRules(),X.fetchRateLimitsPage())}),An(()=>{let e=nk.filteredDisplayModels.length;return Er(()=>nk.restartModelRendering(e)),()=>nk.stopModelRendering()});let n=O(()=>q.needsAuth);var r=Ij(),i=M(r),a=P(M(i),2),o=e=>{var t=Ej(),n=M(t),r=M(n,!0);T(n),Ue(),T(t),F(()=>B(r,Pc.filter?nk.filteredDisplayModels.length+` / `+nk.displayModels.length:nk.displayModels.length)),z(e,t)};V(a,e=>{nk.displayModels.length>0&&e(o)}),T(i);var s=P(i,2);Ic(s,{});var c=P(s,2),l=e=>{z(e,Dj())};V(c,e=>{!nk.virtualModelsAvailable&&!I(n)&&e(l)});var u=P(c,2),d=e=>{var t=Oj(),n=M(t,!0);T(t),F(()=>B(n,nk.aliasError)),z(e,t)};V(u,e=>{nk.aliasError&&!I(n)&&e(d)});var f=P(u,2),p=e=>{var t=Oj(),n=M(t,!0);T(t),F(()=>B(n,Ck.modelPricingOverrideError)),z(e,t)};V(f,e=>{Ck.modelPricingOverrideError&&!I(n)&&!Ck.modelPricingOverrideFormOpen&&e(p)});var m=P(f,2),h=e=>{var t=Aj();H(t,21,()=>Pc.categories,e=>e.category,(e,t)=>{var n=kj();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:Pc.activeCategory===I(t).category}),B(a,I(t).display_name),B(s,I(t).count)}),L(`click`,n,()=>Pc.selectCategory(I(t).category)),z(e,n)}),T(t),z(e,t)};V(m,e=>{Pc.categories.length>0&&e(h)});var g=P(m,2),_=e=>{var t=Mj(),n=M(t);xw(M(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Pc.filter},set value(e){Pc.filter=e}}),T(n);var r=P(n,2),i=M(r),a=e=>{var t=jj();K(M(t),{get icon(){return mo},class:`alias-create-icon`}),Ue(2),T(t),L(`click`,t,()=>nk.openVirtualModelCreate()),z(e,t)};V(i,e=>{nk.virtualModelsAvailable&&e(a)}),T(r),T(t),z(e,t)};V(g,e=>{(nk.displayModels.length>0||Pc.filter||nk.virtualModelsAvailable)&&e(_)});var v=P(g,2),y=e=>{{let t=O(()=>nk.modelLoadingText());gT(e,{get label(){return I(t)},class:`models-loading-state`})}},b=O(()=>nk.modelsBusy()&&!I(n));V(v,e=>{I(b)&&e(y)});var x=P(v,2);BA(x,{});var S=P(x,2);ZA(S,{});var C=P(S,2),w=e=>{bA(e,{})};V(C,e=>{(nk.displayModels.length>0||Pc.filter)&&e(w)});var ee=P(C,2),te=e=>{z(e,Nj())};V(ee,e=>{nk.displayModels.length===0&&!Pc.loading&&!I(n)&&!Pc.filter&&(Pc.activeCategory===`all`||!Pc.activeCategory)&&e(te)});var ne=P(ee,2),re=e=>{z(e,Pj())};V(ne,e=>{nk.displayModels.length===0&&!Pc.loading&&!I(n)&&!Pc.filter&&Pc.activeCategory&&Pc.activeCategory!==`all`&&e(re)});var ie=P(ne,2),ae=e=>{z(e,Fj())};V(ie,e=>{nk.displayModels.length>0&&nk.filteredDisplayModels.length===0&&Pc.filter&&e(ae)});var oe=P(ie,2);Tj(oe,{});var se=P(oe,2);LD(se,{});var ce=P(se,2);aj(ce,{}),mj(P(ce,2),{}),T(r),z(e,r),D()}Hr([`click`]);var Rj=`draft-workflow-preview`;function zj(){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 Bj(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function Vj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Hj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function Uj(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 Wj(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 Gj(e){return{cache:!!Uj(e,`cache`,!1),audit:!!Uj(e,`audit`,!1),usage:!!Uj(e,`usage`,!1),budget:Uj(e,`budget`,!0)!==!1,guardrails:!!Uj(e,`guardrails`,!1),failover:Uj(e,`failover`,!0)!==!1}}function Kj(e,t){let n=Gj(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 qj(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...Kj((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:Gj(n).failover}}function Jj(e,t){return qj(e,t).failover?`On`:`Off`}function Yj(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:Hj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function Xj(e,t){return qj(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function Zj(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function Qj(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function $j(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=Qj(e);t&&n.add(t)}),[...n].sort()}function eM(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&&Qj(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function tM(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 nM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function rM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=nM(e);return n===`global`?`All models`:n}function iM(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 aM(e){if(iM(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 oM(e){let t=e||zj(),n=String(t.scope_provider||``).trim(),r=aM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function sM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=aM(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 cM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=aM(e&&e.scope_user_path),i=sM({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 lM(e,t){let n=t||Bj(),r=Zj(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=aM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===aM(n.scope_user_path)}function uM(e,t,n){let r=oM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>lM(e,r))||null}function dM(e){return String(e&&e.scope_type||``).trim()!==`global`}function fM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function pM(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,Zj(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 mM(e,t){let n=e||zj(),r=oM(n),i=Gj(n.features||{}),a=Kj(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?Yj(n):[];return{id:Rj,scope_type:sM(r),scope_display:cM(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 hM({form:e,caps:t,workflows:n=[],formHydrated:r=!1,hydratedScope:i=null}){let a=e||zj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=aM(a.scope_user_path),l=Gj(a.features||{}),u=Kj(l,t),d=uM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=Wj(f,`failover`),m=p?Uj(f,`failover`,!0)!==!1:null,h=i||Bj(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&aM(h.scope_user_path)===aM(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:Hj(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 gM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||Bj(),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&&!$j(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=eM(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=iM(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 _M=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(Bj()));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(zj()));get form(){return I(this.#f)}set form(e){A(this.#f,e,!0)}#p=null;failoverVisible(){return Cs.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:Cs.cacheVisible(),audit:Cs.auditVisible(),usage:Cs.usageVisible(),budget:Cs.budgetsVisible(),guardrails:Cs.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return pM(this.workflows,this.filter)}providerOptions(){return $j(Pc.models,this.hydratedScope)}modelOptions(e){return eM(Pc.models,e,this.hydratedScope)}activeScopeMatch(){return uM(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 mM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=Bj(),this.form=zj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:Zj(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?Gj(e.workflow_payload.features):qj(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:Hj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):Yj(e);this.form={scope_provider:Zj(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=Bj(),this.form=zj()}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(Vj(e))}removeGuardrailStep(e){Array.isArray(this.form.guardrails)&&this.form.guardrails.splice(e,1)}buildRequest(){return hM({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 yT(`/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 yT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([Cs.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=gM(e,{models:Pc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await bT(`/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}J.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||!dM(e))return;let n=rM(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 bT(`/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`){J.error(e.error);return}J.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function vM(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 yM({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 vM(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 bM=R(``);function xM(e,t){E(t,!0);let n=G(t,`workflowID`,3,``),r=yM({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=bM();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 Xa}}),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 SM=(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=EM(),l=M(c),u=e=>{var t=CM();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=wM(),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=TM(),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)},CM=R(`
`),wM=R(` `),TM=R(` `),EM=R(`
`),DM=R(`
`,1),OM=R(`
`,1),kM=R(`
`),AM=R(`
Async
`),jM=R(`
`);function MM(e,t){E(t,!0);let n=G(t,`chart`,19,()=>({}));var r=jM();let i;var a=M(r),o=e=>{xM(e,{get workflowID(){return n().workflowID}})};V(a,e=>{n().workflowID&&e(o)});var s=P(a,2),c=M(s);SM(c,()=>({icon:No,label:`Client`,variant:`workflow-node-endpoint`}));var l=P(c,4);SM(l,()=>({icon:Qa,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=P(l,2),d=e=>{var t=DM(),r=N(t);SM(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=OM();SM(P(N(t),2),()=>({icon:Po,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=OM();SM(P(N(t),2),()=>({icon:Eo,label:`Guardrails`,sub:n().guardrailLabel})),z(e,t)};V(m,e=>{n().showGuardrails&&e(h)});var g=P(m,2),_=P(g,2);SM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=P(_,2),y=e=>{var t=DM(),r=N(t);SM(P(r,2),()=>({icon:so,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);SM(P(b,2),()=>({icon:Ka,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),T(s);var x=P(s,2),S=e=>{var t=AM(),r=M(t),i=M(r),a=e=>{SM(e,()=>({icon:Ba,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,kM())};V(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=P(o,2),l=e=>{SM(e,()=>({icon:$a,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 NM(e){let t=Yj(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function PM(e,t){return t&&t.provider?t.provider:Zj(e&&e.scope)||`AI`}function FM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function IM(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 LM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:Gj(t)}function RM(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 zM(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 zM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=zM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:zM(e.error,t+1)):``}function BM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||zM(t.response_body)}function VM(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 HM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=RM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=VM(n);if(i)return i;let a=Zj(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 UM(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=RM(e),o=HM(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=BM(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 WM(e){return!!(e&&e.cacheHit)}function GM(e){return!!(e&&e.failoverTarget)}function KM(e){return!!(e&&e.budgetExceeded)}function qM(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function JM(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function YM(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function XM(e,t,n,r){return e?KM(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function ZM(e){return KM(e)?`Exceeded`:null}function QM(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function $M(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function eN(e){return e&&e.failoverTarget?`Redirected`:null}function tN(e){return e&&e.failoverTarget?e.failoverTarget:null}function nN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function rN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function iN(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 aN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function oN(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 sN(e){return!e||!e.authMethod?null:e.authMethod}function cN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function lN(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 uN(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 dN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function fN(e,t){return!e||!e._live||lN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function pN(e,t,n){return!e||!e._live?``:dN(e)?`usage`:fN(e,t)?`audit`:lN(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 mN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?Gj(i.features):qj(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||KM(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||GM(t),m=IM(e,i.entry),h=pN(i.entry,t,a),g=dN(i.entry),_=fN(i.entry,t),v=lN(i.entry,s),y=uN(i.entry,s);return{showBudget:c,budgetNodeClass:XM(c,t,s,h===`budget`),budgetStatusLabel:ZM(t),showGuardrails:l,guardrailLabel:l?NM(e):``,showCache:!!i.forceCache||!!a.cache||WM(t),cacheNodeClass:qM(t,h===`cache`),cacheConnClass:JM(t),cacheStatusLabel:YM(t),showFailover:p,failoverNodeClass:p?QM(t):``,failoverConnClass:p?$M(t):``,failoverStatusLabel:p?eN(t):null,failoverTargetLabel:p?tN(t):null,aiLabel:PM(e,t),aiSublabel:FM(e,t),aiConnClass:nN(t),aiNodeClass:rN(t,h===`ai`),responseConnClass:nN(t),responseNodeClass:iN(t,h===`response`),responseNodeSublabel:aN(t),authNodeClass:oN(t,h===`auth`),authNodeSublabel:sN(t),usageNodeClass:cN(u,y,g),auditNodeClass:cN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function hN(e,t){return mN(e,null,{forceCache:!1},t)}function gN(e,t,n){return mN(t,UM(e,t),{entry:e,features:LM(e)||(t?qj(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var _N=R(`

`),vN=R(`

`),yN=R(`
`),bN=R(`
`),xN=R(`

No guardrails configured for this workflow.

`),SN=R(`

Guardrails

`),CN=R(``),wN=R(`

`);function TN(e,t){E(t,!0);let n=G(t,`preview`,3,!1),r=O(()=>_M.featureCaps()),i=O(()=>rM(t.workflow)),a=O(()=>Xj(t.workflow,I(r))),o=O(()=>hN(t.workflow,I(r))),s=O(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=wN();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=_N(),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=vN(),i=M(n);T(n),F(e=>B(i,`Failover: ${e??``}`),[()=>Jj(t.workflow,I(r))]),z(e,n)},C=O(()=>_M.failoverVisible());V(x,e=>{I(C)&&e(S)});var w=P(x,2);MM(w,{get chart(){return I(o)}});var ee=P(w,2),te=e=>{var t=SN(),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=bN();H(t,23,()=>I(a),(e,t)=>I(s)+t,(e,t)=>{var n=yN(),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,xN())};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(()=>Cs.guardrailsVisible());V(ee,e=>{I(ne)&&e(te)});var re=P(ee,2),ie=e=>{var n=CN(),r=M(n),a=M(r),o=M(a,!0);T(a);var s=P(a,2);{let e=O(()=>`Edit workflow `+I(i));vT(s,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>_M.openCreate(t.workflow),children:(e,t)=>{K(e,{get icon(){return fo},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,_M.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),B(u,`version: v${t.workflow.version??``}`),B(f,`created: ${r??``}`),B(m,`hash: ${s??``}`)},[()=>_M.deactivatingID===t.workflow.id||!dM(t.workflow),()=>dM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>fs.formatTimestamp(t.workflow.created_at),()=>fM(t.workflow.workflow_hash)]),L(`click`,a,()=>_M.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)},[()=>tM(t.workflow),()=>nM(t.workflow)]),z(e,c),D()}Hr([`click`]);var EN=R(`

`),DN=R(``),ON=R(``),kN=R(``),AN=R(``),jN=R(``),MN=R(``),NN=R(``),PN=R(``),FN=R(``),IN=R(``),LN=R(``),RN=R(``),zN=R(`
No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
`),BN=R(`
`),VN=R(`
`),HN=R(`

No guardrail steps configured yet.

`),UN=R(`

Guardrail Steps

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

`),WN=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 GN(e,t){E(t,!0);{let t=e=>{JS(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=EN(),n=M(t,!0);T(t),F(e=>B(n,e),[()=>_M.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),z(e,t)},$$slots:{title:!0}})},n=O(()=>_M.submitLabel()),r=O(()=>_M.submittingLabel()),i=O(()=>_M.submitMode()===`create`?mo:vo);SE(e,{get open(){return _M.formOpen},ariaLabel:`Workflow editor`,get error(){return _M.formError},get submitting(){return _M.submitting},get submitLabel(){return I(n)},get submittingLabel(){return I(r)},get submitIcon(){return I(i)},dialogClass:`workflow-editor`,onclose:()=>_M.closeForm(),onsubmit:()=>_M.submitForm(),header:t,children:(e,t)=>{var n=WN(),r=N(n),i=M(r);wE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=ON(),r=M(n);r.value=r.__value=``,H(P(r),16,()=>_M.providerOptions(),e=>e,(e,t)=>{var n=DN(),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=>_M.setProvider(e.currentTarget.value)),Gi(n,()=>_M.form.scope_provider,e=>_M.form.scope_provider=e),z(e,n)},$$slots:{default:!0}});var a=P(i,2),o=e=>{wE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=kN(),r=M(n);r.value=r.__value=``,H(P(r),17,()=>_M.modelOptions(_M.form.scope_provider),e=>_M.form.scope_provider+`-`+e,(e,t)=>{var n=DN(),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,()=>_M.form.scope_model,e=>_M.form.scope_model=e),z(e,n)},$$slots:{default:!0}})};V(a,e=>{_M.form.scope_provider&&e(o)});var s=P(a,2);wE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=AN();na(n),da(n,()=>_M.form.name,e=>_M.form.name=e),z(e,n)},$$slots:{default:!0}}),wE(P(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=jN();na(n),da(n,()=>_M.form.scope_user_path,e=>_M.form.scope_user_path=e),z(e,n)},$$slots:{default:!0}}),T(r);var c=P(r,8);wE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=MN();ft(n),da(n,()=>_M.form.description,e=>_M.form.description=e),z(e,n)},$$slots:{default:!0}});var l=P(c,2),u=M(l),d=e=>{var t=NN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.cache,e=>_M.form.features.cache=e),z(e,t)},f=O(()=>Cs.cacheVisible());V(u,e=>{I(f)&&e(d)});var p=P(u,2),m=e=>{var t=PN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.audit,e=>_M.form.features.audit=e),z(e,t)},h=O(()=>Cs.auditVisible());V(p,e=>{I(h)&&e(m)});var g=P(p,2),_=e=>{var t=FN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.usage,e=>_M.form.features.usage=e),z(e,t)},v=O(()=>Cs.usageVisible());V(g,e=>{I(v)&&e(_)});var y=P(g,2),b=e=>{var t=IN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.budget,e=>_M.form.features.budget=e),z(e,t)},x=O(()=>Cs.budgetsVisible());V(y,e=>{I(x)&&e(b)});var S=P(y,2),C=e=>{var t=LN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.guardrails,e=>_M.form.features.guardrails=e),z(e,t)},w=O(()=>Cs.guardrailsVisible());V(S,e=>{I(w)&&e(C)});var ee=P(S,2),te=e=>{var t=RN(),n=M(t);na(n),Ue(2),T(t),fa(n,()=>_M.form.features.failover,e=>_M.form.features.failover=e),z(e,t)},ne=O(()=>_M.failoverVisible());V(ee,e=>{I(ne)&&e(te)}),T(l);var re=P(l,2),ie=P(M(re),2);{let e=O(()=>_M.preview());TN(ie,{get workflow(){return I(e)},preview:!0})}T(re);var ae=P(re,2),oe=e=>{var t=UN(),n=M(t),r=P(M(n),2);T(n);var i=P(n,2),a=e=>{var t=zN(),n=P(M(t),2);T(t),L(`click`,n,()=>Yo.navigate(`guardrails`)),z(e,t)};V(i,e=>{_M.guardrailRefs.length===0&&e(a)});var o=P(i,2),s=e=>{var t=VN();H(t,21,()=>_M.form.guardrails,oi,(e,t,n)=>{var r=BN(),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,()=>_M.removeGuardrailStep(n)),z(e,r)}),T(t),z(e,t)},c=e=>{z(e,HN())};V(o,e=>{_M.form.guardrails.length>0?e(s):e(c,-1)}),T(t),L(`click`,r,()=>_M.addGuardrailStep()),z(e,t)},se=O(()=>_M.form.features.guardrails&&Cs.guardrailsVisible());V(ae,e=>{I(se)&&e(oe)}),z(e,n)},$$slots:{header:!0,default:!0}})}D()}Hr([`change`,`click`]);var KN=R(`

Loading workflows...

`),qN=R(`
`),JN=R(`

No active workflows found.

`),YN=R(`

No workflows match your filter.

`),XN=R(`
`);function ZN(e,t){E(t,!0);var n=XN(),r=M(n),i=e=>{var t=KN();CS(M(t),{size:16,label:`Loading workflows`}),Ue(),T(t),z(e,t)};V(r,e=>{_M.loading&&!q.authError&&e(i)});var a=P(r,2),o=e=>{var t=qN();H(t,21,()=>_M.filteredWorkflows,e=>e.id,(e,t)=>{TN(e,{get workflow(){return I(t)}})}),T(t),z(e,t)};V(a,e=>{_M.filteredWorkflows.length>0&&e(o)});var s=P(a,2),c=e=>{z(e,JN())};V(s,e=>{_M.workflows.length===0&&!_M.loading&&!q.authError&&_M.available&&e(c)});var l=P(s,2),u=e=>{z(e,YN())};V(l,e=>{_M.workflows.length>0&&_M.filteredWorkflows.length===0&&!_M.loading&&e(u)}),T(n),z(e,n),D()}var QN=R(``),$N=R(`
Workflows feature is unavailable.
`),eP=R(`
`),tP=R(`
`),nP=R(``),rP=R(`
`);function iP(e,t){E(t,!0),An(()=>{q.refreshTick,_M.fetchPage()});var n=rP(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=QN();K(M(t),{get icon(){return mo},class:`form-action-icon`,"aria-hidden":`true`}),Ue(2),T(t),L(`click`,t,()=>_M.openCreate()),z(e,t)};V(a,e=>{_M.available&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,$N())};V(s,e=>{!_M.available&&!q.authError&&e(c)});var l=P(s,2),u=e=>{var t=eP(),n=M(t,!0);T(t),F(()=>B(n,_M.error)),z(e,t)};V(l,e=>{_M.error&&!q.authError&&e(u)});var d=P(l,2),f=e=>{var t=tP(),n=M(t);xw(M(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return _M.filter},set value(e){_M.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,_M.filteredWorkflows.length+` active scopes`)),z(e,t)};V(d,e=>{_M.available&&e(f)});var p=P(d,2);GN(p,{});var m=P(p,2);ZN(m,{});var h=P(m,2);H(h,20,()=>_M.guardrailRefs,e=>e,(e,t)=>{var n=nP(),r={};F(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),z(e,n)}),T(h),T(n),z(e,n),D()}Hr([`click`]);function aP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=Zs}=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=oP(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 oP(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 sP=null;function cP(){return sP===null&&(sP=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(sP&&sP.matches)}function lP(e){return cP()?0:e}function uP(e,t){return!t||!t.live?{duration:0}:Ys(e,{duration:lP(150)})}var dP=new class{#e=k(j({}));get workflowVersionsByID(){return I(this.#e)}set workflowVersionsByID(e){A(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:Cs.cacheVisible(),audit:Cs.auditVisible(),usage:Cs.usageVisible(),budget:Cs.budgetsVisible(),guardrails:Cs.guardrailsVisible(),failover:Cs.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 vs(`/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}},fP=6;function pP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function mP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>fP)return r;let i=pP(r);return i==null?r:hP(i,t+1,n)||n&&n(i)||r}function hP(e,t=0,n=null,r=null){if(e==null||t>fP)return``;if(typeof e==`string`){let i=pP(e.trim());return i==null?``:hP(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||vP(t&&t.response_body)}function bP(e){let t=e&&e.data?e.data:null;return t?gP(t.error_message)||(yP(e,t)?hP(t.response_body,0):``):``}function xP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function SP(e){let t=xP(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 CP(e){let t=xP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function wP(e){let t=xP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function TP({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 EP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function DP(e){return String(e&&e.session_id||``).trim()}function OP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function kP(e){return!!DP(e)&&OP(e)>1}function AP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:DP(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 jP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>FP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!FP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>FP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!FP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function MP(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 NP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>DP(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 PP(e){return String(e&&e.id||``).trim()}function FP(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 IP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function LP(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 RP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&LP(t)}function zP(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,!RP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>IP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>FP(e))),s=[];return a.forEach(e=>{let t=FP(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 BP(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,!RP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>IP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>FP(e))),s=new Map;i.forEach((e,t)=>{let n=DP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=FP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=DP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(OP(l[r]),OP(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 VP(e,t){let n=PP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function HP(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]=!0;return}a=!0}),a?i:n}function UP(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 WP(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 GP(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 KP(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 qP(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 JP(e){let t=qP(e);return t.length>1||t.some(e=>!(e&&e.success))}function YP(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function XP(e){return String(e&&e.kind||``).trim()||`attempt`}function ZP(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 QP(e){return String(e&&e.model||``).trim()||`-`}function $P(e){let t=qP(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function eF(e){return qP(e).length+`×`}function tF(e){let t=qP(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 nF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=XP(e);n&&n!==`attempt`&&t.push(n),t.push(YP(e));let r=ZP(e);r&&r!==`-`&&t.push(r);let i=QP(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function rF(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 iF(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 aF(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 oF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function sF(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=rF(e,t),a=aF(e,t),o=iF(t),s=i!=null&&i!==``,c=XP(t),l=qP(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:oF(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 cF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function lF(e){return cF(e).filter(e=>!(e&&e.no_change))}function uF(e){return cF(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 dF(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 fF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=lF(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:dF(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 pF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function mF(e){let t=pF(e);return Number(t&&t.cached_input_tokens||0)>0}function hF(e){let t=pF(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 gF(e){let t=pF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?sc(r)+` cached`:hF(e).toFixed(1)+`% cached`}function _F(e){return mF(e)?gF(e):``}function vF(e,t){let n=pF(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 yF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&GP(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:_F(e),promptCacheHighlight:vF(e,t),noChangeSteps:uF(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 bF(e){let t=e&&e.data?e.data:null,n=bP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&GP(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)&&GP(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 xF(e,t){let n=[{id:`request`,pane:yF(e,t)}];return lF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:fF(e,t)})}),JP(e)?qP(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:sF(e,t)})}):n.push({id:`response`,pane:bF(e)}),n}function SF(e){if(!JP(e))return`response`;let t=qP(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 CF(e,t,n){return e&&(Array.isArray(n)?n:xF(t)).some(t=>t.id===e)?e:SF(t)}function wF(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 TF=100;function EF(){return{entries:[],total:0,limit:25,offset:0}}var DF=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 NC.auditLog}set auditLog(e){NC.auditLog=e}get auditSearch(){return NC.auditSearch}set auditSearch(e){NC.auditSearch=e}get auditMethod(){return NC.auditMethod}set auditMethod(e){NC.auditMethod=e}get auditStatusCode(){return NC.auditStatusCode}set auditStatusCode(e){NC.auditStatusCode=e}get auditStream(){return NC.auditStream}set auditStream(e){NC.auditStream=e}get auditGroupSessions(){return NC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Nc.customStartDate,customEndDate:Nc.customEndDate}}toggleAuditGroupSessions(){NC.auditGroupSessions=!NC.auditGroupSessions,Ta(`gomodel_audit_group_sessions`,NC.auditGroupSessions),this.auditExpandedThreads={},NC.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=TP({dateQuery:Nc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await vs((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=EF();return}let a=n?AP(i.data):i.data,o=(n?BP:zP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=NC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=NP(this.auditExpandedThreads,o.entries),NC.auditThreadChildren=NP(NC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=HP(this.auditExpandedEntries,s);try{await dP.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=EF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=NC.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&&NC.auditThreadChildren[e]||null}async toggleThread(e){let t=DP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=MP(this.auditExpandedThreads,t);let r=NC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=DP(e);if(!t)return;let n=NC.auditThreadChildren[t];NC.auditThreadChildren={...NC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...NC.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=MP(this.auditExpandedThreads,t))),NC.auditThreadChildren=e};try{let n=await vs(`/admin/audit/log?`+EP({sessionId:t,limit:TF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=NC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>DP(e)===t),o=jP(i,n.data.entries,a?[a]:[e]);o.entries=NC.upsertAuditRecords(o.entries,`audit.thread`),NC.auditThreadChildren={...NC.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=PP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=VP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof NC.fetchAuditEntryDetail==`function`&&NC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};NC.fetchAuditLog=e=>DF.fetchAuditLog(e),NC.isAuditEntryExpanded=e=>DF.isAuditEntryExpanded(e);var OF=R(`
`);function kF(e,t){E(t,!0);let n=Sw(()=>DF.fetchAuditLog(!0));An(()=>n.cancel);var r=OF(),i=M(r);xw(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 DF.auditSearch},set value(e){DF.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 Lo},class:`table-icon-svg`}),Ue(2),T(ae),T(a),T(r),L(`change`,o,()=>DF.fetchAuditLog(!0)),Gi(o,()=>DF.auditMethod,e=>DF.auditMethod=e),L(`change`,p,()=>DF.fetchAuditLog(!0)),Gi(p,()=>DF.auditStatusCode,e=>DF.auditStatusCode=e),L(`change`,te,()=>DF.fetchAuditLog(!0)),Gi(te,()=>DF.auditStream,e=>DF.auditStream=e),L(`click`,ae,()=>DF.clearAuditFilters()),z(e,r),D()}Hr([`change`,`click`]);var AF=R(`Live stream connecting…`),jF=R(` `),MF=R(`Live`),NF=R(` `);function PF(e,t){E(t,!0);let n=O(()=>NC.auditLivePauseReason()),r=O(()=>NC.liveLogsStreaming&&!I(n));var i=Qr(),a=N(i),o=e=>{var t=NF(),i=M(t);let a;var o=P(i,2),s=e=>{z(e,AF())},c=e=>{var t=jF(),r=M(t,!0);T(t),F(e=>B(r,e),[()=>xC(I(n))]),z(e,t)},l=e=>{z(e,MF())};V(o,e=>{NC.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(()=>Cs.liveLogsVisible());V(a,e=>{I(s)&&e(o)}),z(e,i),D()}var FF=R(` `),IF=R(``);function LF(e,t){E(t,!0);let n=O(()=>[{key:`provider`,text:_c(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: `+bc(t.entry),mono:!0},{key:`failover`,text:KP(t.entry)&&`failover: `+KP(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=IF(),i=P(M(r),2);H(i,21,()=>I(n),e=>e.key,(e,t)=>{var n=FF(),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 RF=R(``),zF=R(` `);function BF(e,t){E(t,!0);let n=O(()=>$P(t.entry)),r=O(()=>I(n).length>0?tF(t.entry):``),i=O(()=>I(n).length>0?eF(t.entry):``);var a=Qr(),o=N(a),s=e=>{var a=zF(),o=M(a);H(o,21,()=>I(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=RF();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)},[()=>nF(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 VF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function HF(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function UF(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:HF(e)).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 WF(e){return!e||typeof e!=`object`?``:UF(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function GF(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 KF(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(KF);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...KF(t)]);let t=String(e);return t?[t]:[]}function qF(e){return UI(e).flatMap(e=>[...e.name?[String(e.name)]:[],...KF(e.arguments)])}function JF(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?qF([e]):GF(e)):GF(e)}function YF(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function XF(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function ZF(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function QF(e){return{characters:(Array.isArray(e)?e:[]).map(ZF)}}function $F(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function eI(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=UF(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=UF(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function tI(e){return WF(e)}function nI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...GF(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...JF(e.content)),t.push(...qF(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...qF([e]));return}t.push(...JF(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...GF(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var rI=e=>UF(e);function iI(e){if(!e||!e.data)return``;let t=hP(e.data.response_body,0,rI);if(t)return t;let n=e.data.error_message;if(n==null)return``;if(typeof n==`string`){let e=n.trim();return e?hP(pP(e),0,rI)||e:``}return hP(n,0,rI)||UF(n)}function aI(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 oI(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 sI(e){return e?!!lI(e):!1}function cI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function lI(e){switch(cI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function uI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function dI(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 fI(e){let t=lI(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 pI(e,t){let n=String(t||``).trim(),r=lI(e&&e.path),i=uI(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&&dI(o,uI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&dI(o,{role:String(a.role||`assistant`),content:uI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var mI=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 hI(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]`||mI.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 gI(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 _I(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=vI(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 vI(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 yI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function bI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?ZI(t,e)>=0?t:e:t,null)}function xI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return bI((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 SI(e,t){let n=bI(e);return!!n&&String(n.id||``)===String(t||``)}function CI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function wI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function TI(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)||aI(n.output));return!!(r||i)}function EI(e){return!e||oI(e.path)?!1:sI(e.path)||TI(e)}function DI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function jI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function MI(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`
`+AI(t)+``+AI(PI(e[t]))+`
`);return t.length?``:``}function II(e){let t=NI(e.content_type),n=AI(t+` · `+MI(e.bytes)),r=FI(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+`
`+AI(i)+`
`+r+`
`}function LI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function RI(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 zI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return AI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+AI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+AI(e.slice(r)):AI(e)}function BI(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=RI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return AI(o);if(!i(e))return o.split(` -`).map(e=>zI(e,a)).join(` -`);let s=o.split(` -`),c=[],l=0;for(;lzI(e,a)).join(` -`);c.push(``+o+``),l=r+1;continue}c.push(zI(e,a)),l++}return c.join(` -`)}function VI(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 HI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=VI(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:QF(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function UI(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function WI(e){return Array.isArray(e)?UI(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function GI(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:UF(e.content)})):[]}function KI(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function qI(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&KI(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||KI(e,t,t.name||``)}),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=>{t&&KI(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||KI(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||KI(e,t,t.name||``)})}function JI(e){return Array.isArray(e)?`[`+e.map(JI).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+JI(e[t])).join(`,`)+`}`:JSON.stringify(e)}function YI(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(JI)}function XI(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function ZI(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 QI(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(ZI),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;qI(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,functionCallID:e.functionCallID});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=(e,t)=>XF(e,t),b=e=>QF(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>HI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=UF(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,GF(g.system))}))}if(g&&g.instructions!==void 0){let e=UF(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,GF(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=UF(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,GF(e.content))}));return}if(t===`assistant`){let n=WF(e),r=[...UI(e.tool_calls),...WI(e.content)];if(n||r.length>0){let a=y(n,GF(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}GI(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=WF(e);n&&i.push(x(t,n,{promptCache:y(n,GF(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:UF(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?GF(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=UI([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=UF(e.content);n&&i.push(x(t,n,{promptCache:y(n,GF(e.content))}))}}}):eI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=GF(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=YI(g),ee=w!==null,te=vI(e),ne=!!te&&a.has(te),re=String(g&&g.previous_response_id||``).trim(),ie=XI(g),ae=ne||!!re&&o.has(re)||!!ie&&s.has(ie);if(m){let e=ee&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(ee&&!e&&!ne||!ee&&!ae)return}p&&ee&&(l=[...w]);let oe=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),oe&&(p||m)&&a.add(oe),ie&&s.add(ie);let se=0;for(;se0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let ce=YF(e);if(g&&ce!==null&&i.splice(0,i.length,...$F(i,ce)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=WF(e.message),r=UI(e.message.tool_calls);if(n||r.length>0){let e=x(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`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:UI([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=tI(e);if(n){let e=x(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=UF(_.content),n=WI(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let le=iI(e);le&&i.push(x(`error`,le));let ue=String(_&&_.id||``).trim();ue&&o.add(ue)}),{messages:i,entryIDs:[...a]}}function $I(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+tL(e)+`)`}).join(` - -`):e.text||``}function eL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?$I({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` - -`):``}function tL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var nL=600*1e3,rL=15*1e3,iL=250,aL=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 conversationEntryIDs(){return I(this.#i)}set conversationEntryIDs(e){A(this.#i,e,!0)}#a=k(``);get conversationSessionID(){return I(this.#a)}set conversationSessionID(e){A(this.#a,e,!0)}#o=k(!1);get conversationTruncated(){return I(this.#o)}set conversationTruncated(e){A(this.#o,e,!0)}#s=k(!1);get conversationFollowLatest(){return I(this.#s)}set conversationFollowLatest(e){A(this.#s,e,!0)}#c=k(``);get conversationOpenedFromID(){return I(this.#c)}set conversationOpenedFromID(e){A(this.#c,e,!0)}#l=k(``);get followUpText(){return I(this.#l)}set followUpText(e){A(this.#l,e,!0)}#u=k(!1);get followUpSending(){return I(this.#u)}set followUpSending(e){A(this.#u,e,!0)}#d=k(``);get followUpError(){return I(this.#d)}set followUpError(e){A(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=k(null);get conversationDialogEl(){return I(this.#f)}set conversationDialogEl(e){A(this.#f,e,!0)}#p=k(null);get conversationCloseBtnEl(){return I(this.#p)}set conversationCloseBtnEl(e){A(this.#p,e,!0)}#m=k(null);get conversationThreadEl(){return I(this.#m)}set conversationThreadEl(e){A(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>NC.auditRecord(e)).filter(Boolean)}#h=O(()=>QI(this.conversationEntries,this.conversationAnchorID));get conversationView(){return I(this.#h)}set conversationView(e){A(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],NC.pinAuditRecords(this.conversationEntryIDs)}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 oc(e)}renderBodyWithConversationHighlights(e,t,n){return BI(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._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(NC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof NC.auditEntryLiveDetailPending==`function`&&NC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=QI(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=xI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=_I(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),CI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=EC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}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 NC.liveAuditStateSettled!=`function`||!NC.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._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;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 vs(`/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.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=NC.upsertAuditRecords(s,`conversation.hydrated`),l=wI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=SI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),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.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return yI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return fI(e)?lI(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=pI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=sL(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},nL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=hI(e,n,r),o=await gs(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 oL(o),!NC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){bs(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()+rL;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 oL(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 sL(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function cL(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 lL=new aL,uL=0;Mn(()=>{An(()=>{let e=OC(NC.auditRecordChanges,uL);e.length!==0&&(uL=Number(e[e.length-1].version||0),Er(()=>{e.forEach(e=>{if(!kC(e))return;let t=NC.auditRecord(e.key);lL.handleAuditRecordChange(t,e.eventType)})}))})});var dL=R(``),fL=R(` `),pL=R(` `),mL=R(``),hL=R(`
`);function gL(e,t){E(t,!0);let n=G(t,`thread`,3,null),r=G(t,`expanded`,3,!1),i=G(t,`onactivate`,3,null),a=G(t,`hidePath`,3,!1),o=O(()=>fs.formatTimestamp(t.entry.timestamp)),s=O(()=>I(o)===`-`?I(o):I(o).slice(I(o).lastIndexOf(` `)+1)),c=O(()=>lL.conversationOpen&&String(lL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(e){if(e.stopPropagation(),e.preventDefault(),I(c)){lL.closeConversation();return}lL.openConversation(t.entry,e.currentTarget)}var f=hL();let p;var m=M(f),h=M(m),g=e=>{var t=dL(),r=M(t);{let e=O(()=>n().expanded?Ua:Ga);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,u),z(e,t)};V(h,e=>{n()&&e(g)});var _=P(h,2),v=M(_),y=M(v,!0);T(v);var b=P(v,2),x=M(b,!0);T(b),T(_);var S=P(_,2),C=e=>{var n=fL(),r=M(n,!0);T(n),F(e=>B(r,e),[()=>xc(t.entry)]),z(e,n)};V(S,e=>{(t.entry.requested_model||t.entry.model)&&e(C)});var w=P(S,2),ee=e=>{var n=pL(),r=M(n,!0);T(n),F(()=>B(r,t.entry.path||`-`)),z(e,n)};V(w,e=>{a()||e(ee)}),T(m);var te=P(m,2),ne=M(te);BF(ne,{get entry(){return t.entry}});var re=P(ne,2),ie=M(re),ae=M(ie,!0);T(ie);var oe=P(ie,2),se=M(oe,!0);T(oe),T(re);var ce=P(re,2),le=M(ce,!0);T(ce);var ue=P(ce,2),de=e=>{var t=mL();let n;var r=M(t);{let e=O(()=>I(c)?Wa:Ga);K(r,{get icon(){return I(e)},class:`audit-conversation-trigger-svg`})}T(t),F(()=>{n=U(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":I(c)}),W(t,`title`,I(c)?`Close interactions`:`Open interactions`),W(t,`aria-label`,I(c)?`Close interactions`:`Open interactions`),W(t,`aria-pressed`,I(c))}),L(`click`,t,d),z(e,t)},fe=O(()=>lL.canShowConversation(t.entry));V(ue,e=>{I(fe)&&e(de)}),T(te),T(f),F((e,n,i,a)=>{p=U(f,1,`audit-entry-summary svelte-17mysgz`,null,p,e),W(f,`aria-expanded`,r()),U(_,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),W(_,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),W(_,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),B(y,t.entry.status_code||`-`),B(x,t.entry.method||`-`),W(re,`title`,i),W(re,`aria-label`,I(o)),B(ae,I(o)),B(se,I(s)),B(le,a)},[()=>({"audit-entry-summary-live-in-progress":GP(t.entry),"audit-entry-summary-has-interactions":lL.canShowConversation(t.entry)}),()=>WP(t.entry.status_code),()=>hc(t.entry.timestamp),()=>UP(t.entry.duration_ns)]),L(`click`,f,l),z(e,f),D()}Hr([`click`]);var _L=R(``);function vL(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=_L();let c;var l=M(s),u=e=>{K(e,{get icon(){return qa},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{K(e,{get icon(){return Xa},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 yL=R(`
Error Message
 
`),bL=R(`
 
`),xL=R(` `),SL=R(` streaming`),CL=R(`
Body
`),wL=R(`

`),TL=R(`

`),EL=R(`

`),DL=R(`
`);function OL(e,t){E(t,!0);let n=yM({logPrefix:`Failed to copy audit payload:`}),r=yM({logPrefix:`Failed to copy audit payload:`}),i=O(()=>t.pane&&t.pane.showHeaders?oc(t.pane.headers):``),a=O(()=>!t.pane||!t.pane.showBody?``:jI(t.pane.body)?II(t.pane.body):lL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=O(()=>!!(t.pane&&lL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),lL.handleErrorConversationClick(e,t.pane.entry))}var c=DL();let l;var u=M(c),d=e=>{var n=yL(),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=>lL.startBodyInteraction(e)),L(`keydown`,r,s),L(`click`,r,e=>lL.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=bL(),a=M(n),o=M(a),s=M(o,!0);T(o),vL(P(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,oc)}),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=CL(),i=M(r),o=M(i),s=P(M(o),2),c=e=>{var n=xL(),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,SL())};V(l,e=>{t.pane.streaming&&e(u)}),T(o),vL(P(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,oc)}),T(i);var d=P(i,2);hi(d,()=>I(a),!0),T(d),T(r),L(`mousedown`,d,e=>lL.startBodyInteraction(e)),L(`click`,d,e=>lL.handleBodyConversationClick(e,t.pane.entry)),z(e,r)};V(m,e=>{t.pane.showBody&&e(h)});var g=P(m,2),_=e=>{var n=wL(),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=TL(),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=EL(),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 kL=R(` `),AL=R(` `),jL=R(` `),ML=R(` `),NL=R(``),PL=R(`
`),FL=R(`
`);function IL(e,t){E(t,!0);let n=G(t,`panes`,19,()=>[]),r=k(null),i=O(()=>CF(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=wF(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=FL(),l=M(c);H(l,21,n,e=>e.id,(e,t)=>{var n=NL();let c;var l=M(n),u=M(l),d=e=>{K(e,{get icon(){return Pa}})},f=e=>{K(e,{get icon(){return Na}})};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=kL(),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=AL(),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=jL(),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=ML(),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=AL(),r=M(n,!0);T(n),F(e=>{U(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),B(r,I(t).pane.statusCode)},[()=>WP(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=PL();let r;OL(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 LL=R(`
`),RL=R(`
`);function zL(e,t){E(t,!0);let n=G(t,`thread`,3,null),r=G(t,`hidePath`,3,!1),i=O(()=>DF.isAuditEntryExpanded(t.entry)),a=O(()=>lL.conversationOpen&&String(lL.conversationAnchorID||``)===String(t.entry.id||``)),o=O(()=>I(i)?xF(t.entry,nI):[]),s=O(()=>I(i)?gN(t.entry,dP.auditEntryWorkflow(t.entry),dP.workflowFeatureCaps()):null);function c(){DF.toggleAuditEntryExpanded(t.entry)}var l=RL();let u;var d=M(l);gL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return I(i)},get hidePath(){return r()},onactivate:c});var f=P(d,2),p=e=>{var n=LL(),r=M(n),i=e=>{MM(e,{get chart(){return I(s)}})};V(r,e=>{I(s)&&e(i)});var a=P(r,2);IL(a,{get entry(){return t.entry},get panes(){return I(o)}}),LF(P(a,2),{get entry(){return t.entry}}),T(n),ki(3,n,()=>Js,()=>({y:-6,duration:lP(150)})),z(e,n)};V(f,e=>{I(i)&&e(p)}),T(l),F(()=>u=U(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":I(a)})),z(e,l),D()}var BL=R(`
`),VL=R(`
`),HL=R(`

`),UL=R(`
`),WL=R(`
`);function GL(e,t){E(t,!0);let n=O(()=>DP(t.entry)),r=O(()=>DF.isThreadExpanded(I(n))),i=O(()=>DF.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=>{zL(e,{get entry(){return t.entry}})},l=O(()=>!kP(t.entry)),u=e=>{var n=WL(),o=M(n);{let e=O(()=>({count:OP(t.entry),expanded:I(r),ontoggle:()=>DF.toggleThread(t.entry)}));zL(o,{get entry(){return t.entry},get thread(){return I(e)}})}var s=P(o,2),c=e=>{var n=UL(),r=M(n),o=e=>{var t=BL();CS(M(t),{size:14,label:`Loading session requests`}),T(t),z(e,t)};V(r,e=>{I(i)&&I(i).loading&&e(o)});var s=P(r,2);H(s,17,()=>I(i)&&I(i).entries||[],e=>e.id,(e,n)=>{var r=VL(),i=M(r);{let e=O(()=>I(n).path===t.entry.path);zL(i,{get entry(){return I(n)},get hidePath(){return I(e)}})}T(r),z(e,r)});var c=P(s,2),l=e=>{var t=HL(),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(c,e=>{I(a)&&e(l)}),T(n),ki(3,n,()=>Ys,()=>({duration:lP(150)})),z(e,n)};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 KL=R(`

.

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

`),YL=R(`
`),XL=R(`
`),ZL=R(`
`),QL=R(`
`),$L=R(`
`);function eR(e,t){E(t,!0);let n=O(()=>Cs.config&&Cs.config.LOGGING_RETENTION_DAYS);An(()=>{if(q.refreshTick,Yo.page===`audit-logs`)return Er(()=>r())});function r(){let e=!1;return(async()=>{try{await Cs.ensureLoaded()}finally{await DF.fetchAuditLog(!0),!e&&Cs.liveLogsVisible()&&NC.ensureLiveLogs()}})(),()=>{e=!0,NC.stopLiveLogs()}}var i=$L(),a=M(i),o=M(a),s=P(M(o),2),c=e=>{JS(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=KL(),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)},[()=>CP(I(n)),()=>wP(I(n))]),z(e,t)},$$slots:{title:!0}})},l=O(()=>SP(I(n)));V(s,e=>{I(l)&&e(c)}),T(o),T(a);var u=P(a,2);nl(M(u),{onchange:()=>DF.fetchAuditLog(!0)}),T(u);var d=P(u,2);Ic(d,{});var f=P(d,2),p=e=>{z(e,qL())},m=O(()=>Cs.loaded&&!Cs.auditVisible()&&!q.needsAuth);V(f,e=>{I(m)&&e(p)});var h=P(f,2),g=M(h);kF(g,{});var _=P(g,2),v=M(_),y=M(v),b=e=>{var t=JL(),n=M(t);T(t),F(e=>B(n,`Showing ${DF.auditLog.offset+1}-${e??``} of ${DF.auditLog.total??``} - ${DF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(DF.auditLog.offset+DF.auditLog.limit,DF.auditLog.total)]),z(e,t)};V(y,e=>{DF.auditLog.total>0&&e(b)});var x=P(y,2),S=M(x);na(S),Ue(2),T(x),T(v),PF(P(v,2),{}),T(_);var C=P(_,2),w=e=>{var t=YL();CS(M(t),{size:18,label:`Loading audit logs`}),T(t),z(e,t)},ee=e=>{var t=ZL();H(t,29,()=>DF.auditLog.entries,e=>e.id,(e,t)=>{var n=XL(),r=M(n),i=e=>{GL(e,{get entry(){return I(t)}})},a=e=>{zL(e,{get entry(){return I(t)}})};V(r,e=>{DF.auditGroupSessions?e(i):e(a,-1)}),T(n),Oi(n,()=>aP,()=>({duration:lP(150)})),ki(1,n,()=>uP,()=>({live:I(t)._live})),z(e,n)}),T(t),z(e,t)};V(C,e=>{DF.loading&&DF.auditLog.entries.length===0?e(w):DF.auditLog.entries.length>0&&e(ee,1)});var te=P(C,2),ne=e=>{var t=QL();ES(M(t),{}),T(t),z(e,t)};V(te,e=>{DF.auditLog.entries.length===0&&!DF.loading&&!q.needsAuth&&e(ne)}),Xw(P(te,2),{get total(){return DF.auditLog.total},get offset(){return DF.auditLog.offset},get limit(){return DF.auditLog.limit},onprev:()=>DF.auditLogPrevPage(),onnext:()=>DF.auditLogNextPage()}),T(h),T(i),F(()=>ia(S,DF.auditGroupSessions)),L(`change`,S,()=>DF.toggleAuditGroupSessions()),z(e,i),D()}Hr([`change`]);function tR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function nR(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 rR(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function iR(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function aR(e,t){let n=String(t||``).trim();return n&&rR(e,n)?n:iR(e)}function oR(e,t){let n=rR(e,t);return!n||!n.defaults?{}:tR(n.defaults)}function sR(e,t,n){return{...oR(e,n),...tR(t)}}function cR(e,t){let n=aR(e,t);return{name:``,type:n,description:``,user_path:``,config:oR(e,n)}}function lR(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 uR(e,t){let n=rR(e,t);return n&&n.label?n.label:t||`Unknown`}function dR(e,t){let n=rR(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function fR(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?nR(n):n}function pR(e,t,n){if(!t)return e;let r=tR(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]=nR(n):r[t.key]=n;return r}function mR(e,t,n){return fR(e,t).includes(String(n||``).trim())}function hR(e,t,n,r){let i=nR(fR(e,t)),a=String(n||``).trim();return a?pR(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function gR(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:tR(e&&e.config)}}var _R=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 lR(this.guardrails,this.filter)}typeLabel(e){return uR(this.types,e)}typeFields(e){return dR(this.types,e)}fieldValue(e){return fR(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:pR(this.form.config,e,t)}}arrayFieldSelected(e,t){return mR(this.form&&this.form.config,e,t)}toggleArrayFieldValue(e,t,n){this.form={...this.form,config:hR(this.form.config,e,t,n)}}openCreate(){this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=cR(this.types,iR(this.types)),this.formOpen=!0}openEdit(e){let t=aR(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:sR(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=cR(this.types,iR(this.types))}changeType(e){let t=aR(this.types,e);this.form={...this.form,type:t,config:oR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await yT(`/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=aR(this.types,this.form.type);this.form={...this.form,type:t,config:sR(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await yT(`/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=gR(this.form);try{let t=await bT(`/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}J.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 bT(`/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,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}J.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},vR=R(`
`),yR=R(`

Loading guardrails...

`),bR=R(`
`),xR=R(`
`),SR=R(`
NameTypeUser PathSummaryActions
`),CR=R(`

No guardrails defined yet.

`),wR=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 TR(e,t){E(t,!0);var n=wR(),r=M(n),i=P(M(r),2);K(M(i),{get icon(){return mo},class:`form-action-icon`}),Ue(2),T(i),T(r);var a=P(r,2),o=e=>{var t=vR(),n=M(t);xw(M(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return _R.filter},set value(e){_R.filter=e}}),T(n),T(t),z(e,t)};V(a,e=>{_R.available&&e(o)});var s=P(a,2),c=e=>{var t=yR();CS(M(t),{size:16,label:`Loading guardrails`}),Ue(),T(t),z(e,t)};V(s,e=>{_R.loading&&_R.filtered.length===0&&e(c)});var l=P(s,2),u=e=>{var t=SR(),n=M(t),r=P(M(n));H(r,21,()=>_R.filtered,e=>e.name,(e,t)=>{var n=xR(),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=bR(),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);vT(_,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>_R.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=P(_,2);{let e=O(()=>(_R.deletingName===I(t).name?`Deleting guardrail `:`Delete guardrail `)+I(t).name),n=O(()=>_R.deletingName===I(t).name);vT(v,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>_R.deleteGuardrail(I(t)),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return Lo},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.`)},[()=>_R.typeLabel(I(t).type)]),z(e,n)}),T(r),T(n),T(t),z(e,t)};V(l,e=>{_R.filtered.length>0&&e(u)});var d=P(l,2),f=e=>{z(e,CR())};V(d,e=>{_R.filtered.length===0&&!_R.loading&&_R.available&&!_R.error&&!q.authError&&e(f)}),T(n),F(()=>i.disabled=_R.typesLoading||_R.formSubmitting||!_R.available),L(`click`,i,()=>_R.openCreate()),z(e,n),D()}Hr([`click`]);var ER=R(`

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

`),DR=R(``),OR=R(``),kR=R(``),AR=R(``),jR=R(``),MR=R(``),NR=R(``),PR=R(``),FR=R(``),IR=R(`
`),LR=R(``),RR=R(` `),zR=R(`
`),BR=R(`
`);function VR(e,t){E(t,!0);let n=O(()=>_R.formMode===`edit`);{let t=e=>{z(e,ER())},r=O(()=>I(n)?`Edit Guardrail`:`Create Guardrail`);SE(e,{get open(){return _R.formOpen},get title(){return I(r)},ariaLabel:`Guardrail editor`,get error(){return _R.error},get submitting(){return _R.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>_R.closeForm(),onsubmit:()=>_R.submitForm(),headerHint:t,children:(e,t)=>{var r=BR(),i=M(r);wE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=DR();na(r),F(()=>{r.disabled=I(n),W(r,`data-modal-autofocus`,!I(n)||void 0)}),da(r,()=>_R.form.name,e=>_R.form.name=e),z(e,r)},$$slots:{default:!0}});var a=P(i,2);wE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=kR();H(r,21,()=>_R.types,e=>e.type,(e,t)=>{var n=OR(),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=_R.form.type)&&(r.value=(r.__value=_R.form.type)??``,Ui(r,_R.form.type))}),L(`change`,r,e=>_R.changeType(e.currentTarget.value)),z(e,r)},$$slots:{default:!0}});var o=P(a,2);wE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=AR();na(r),F(()=>W(r,`data-modal-autofocus`,I(n)?!0:void 0)),da(r,()=>_R.form.description,e=>_R.form.description=e),z(e,r)},$$slots:{default:!0}});var s=P(o,2),c=M(s);JS(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,jR())},$$slots:{title:!0}});var l=P(c,2);na(l),T(s),H(P(s,2),17,()=>_R.typeFields(_R.form.type),e=>e.key,(e,t)=>{var n=Qr(),r=N(n),i=e=>{var n=IR(),r=M(n);{let e=e=>{var n=MR(),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||``);JS(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=NR();H(n,21,()=>I(t).options||[],e=>e.value,(e,t)=>{var n=OR(),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))},[()=>_R.fieldValue(I(t))]),L(`change`,n,e=>_R.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},o=e=>{var n=PR();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)},[()=>_R.fieldValue(I(t))]),L(`input`,n,e=>_R.setFieldValue(I(t),e.currentTarget.value)),z(e,n)},s=e=>{var n=FR();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)},[()=>_R.fieldValue(I(t))]),L(`input`,n,e=>_R.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=zR(),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=LR(),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)},[()=>_R.arrayFieldSelected(I(t),I(n).value)]),L(`change`,i,e=>_R.toggleArrayFieldValue(I(t),I(n).value,e.currentTarget.checked)),z(e,r)}),T(a);var o=P(a,2),s=e=>{var n=RR(),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,()=>_R.form.user_path,e=>_R.form.user_path=e),z(e,r)},$$slots:{headerHint:!0,default:!0}})}D()}Hr([`change`,`input`]);var HR=R(`

Guardrails

`),UR=R(`
Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage - definitions here.
`),WR=R(`
Guardrails feature is unavailable.
`),GR=R(`
`),KR=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 qR(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`guardrails`&&(Cs.ensureLoaded(),_R.fetchPage())});var n=KR(),r=M(n),i=M(r);JS(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,HR())},$$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);Ic(p,{});var m=P(p,2),h=e=>{z(e,UR())},g=O(()=>!Cs.guardrailsVisible());V(m,e=>{I(g)&&e(h)});var _=P(m,2),v=e=>{z(e,WR())};V(_,e=>{!q.authError&&!_R.available&&e(v)});var y=P(_,2),b=e=>{var t=GR(),n=M(t,!0);T(t),F(()=>B(n,_R.error)),z(e,t)};V(y,e=>{!q.authError&&_R.error&&!_R.formOpen&&e(b)});var x=P(y,2);VR(x,{}),TR(P(x,2),{}),T(n),F((e,t)=>{B(l,e),B(f,t)},[()=>sc(_R.guardrails.length),()=>sc(_R.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(fx()));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(px()));get catalog(){return I(this.#g)}set catalog(e){A(this.#g,e,!0)}#_=O(()=>wx(this.servers,this.filter));get filtered(){return I(this.#_)}set filtered(e){A(this.#_,e)}async fetchServers(){if(await Cs.ensureLoaded(),!Cs.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await yT(`/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=fx(),this.formOpen=!0}openEdit(e){!e||e.managed||(this.formMode=`edit`,this.slugEdited=!0,this.advancedOpen=!1,this.error=``,this.form=Tx(e),this.formOpen=!0)}closeForm(){this.formOpen=!1,this.formMode=`create`,this.slugEdited=!1,this.advancedOpen=!1,this.error=``,this.form=fx()}syncSlugFromName(){this.formMode===`create`&&!this.slugEdited&&(this.form.slug=bx(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=Ex(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await bT(`/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}J.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=mx(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 bT(`/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,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}J.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=mx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await bT(`/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,J.error(e.error);return}if(e.status===`error`){J.error(e.error);return}let r=e.result.data,i=hx(r);i===`connected`?J.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?J.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):J.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>mx(e)===mx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=mx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...px(),server:n,status:hx(e)};try{let e=await vs(`/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.`:ps(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Dx(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=px()}},JR=R(``),YR=R(`

`),XR=R(`
`),ZR=R(`

`),QR=R(`
  • `),$R=R(`

      `),ez=R(`

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

      `),tz=R(` `,1),nz=R(``);function rz(e,t){E(t,!0);let n=O(()=>kx(Q.catalog));Ps(e,{get open(){return Q.catalogOpen},variant:`editor`,onclose:()=>Q.closeCatalog(),children:(e,t)=>{var r=nz(),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),As(P(a,2),{label:`Close MCP server catalog`,onclick:()=>Q.closeCatalog()}),T(i);var d=P(i,2),f=e=>{gT(e,{label:`Loading catalog...`})},p=e=>{var t=JR(),n=M(t,!0);T(t),F(()=>B(n,Q.catalogError)),z(e,t)},m=e=>{var t=tz(),r=N(t),i=e=>{var t=YR(),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=$R(),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=QR(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{var n=XR(),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=ZR(),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,ez())},c=O(()=>Ax(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)},[()=>gx(Q.catalog),()=>hx(Q.catalog)]),L(`click`,g,()=>Q.closeCatalog()),z(e,r)},$$slots:{default:!0}}),D()}Hr([`click`]);var iz=R(`

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

      `),az=R(` Human-readable and Unicode-friendly. You can change it later.`,1),oz=R(`Derived from the name. You may edit it before saving.`),sz=R(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),cz=R(` `,1),lz=R(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),uz=R(``),dz=R(`
      `),fz=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 pz(e,t){E(t,!0);{let t=e=>{z(e,iz())},n=O(()=>Q.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);SE(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=fz(),r=N(n);wE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=az(),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);wE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=cz(),r=N(n);na(r);var i=P(r,2),a=e=>{z(e,oz())},o=e=>{z(e,sz())};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);wE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=lz(),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);wE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=uz();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=dz(),i=M(r);na(i);var a=P(i,2);na(a),vT(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 jo},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 mo},class:`form-action-icon`}),Ue(2),T(u),T(l),Ue(2),T(s);var d=P(s,2),f=M(d);SA(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 mz=R(`Config`),hz=R(`
      `),gz=R(`
      `),_z=R(`
      NameTransportEndpointStatusToolsEnabledActions
      `);function vz(e,t){E(t,!0);function n(e){return _x(e,e=>fs.formatTimestamp(e))}var r=_z(),i=M(r),a=P(M(i));H(a,21,()=>Q.filtered,e=>mx(e),(e,t)=>{var r=gz(),i=M(r),a=M(i),o=M(a,!0);T(a);var s=P(a,2),c=e=>{z(e,mz())};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=hz(),r=M(n,!0);T(n),F(()=>B(r,I(t).last_error)),z(e,n)},x=O(()=>hx(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);vT(e,{get label(){return I(n)},class:`table-icon-btn`,onclick:()=>Q.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return fo},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);vT(le,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>Q.openCatalog(I(t)),children:(e,t)=>{K(e,{get icon(){return ao},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=P(le,2);{let e=O(()=>(Q.reconnectingName===mx(I(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+I(t).name),n=O(()=>Q.reconnectingName===mx(I(t)));vT(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 go},class:`form-action-icon`})},$$slots:{default:!0}})}var de=P(ue,2),fe=e=>{{let n=O(()=>(Q.deletingName===mx(I(t))?`Deleting MCP server `:`Delete MCP server `)+I(t).name),r=O(()=>Q.deletingName===mx(I(t)));vT(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 Lo},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`)},[()=>mx(I(t)),()=>vx(I(t)),()=>vx(I(t)),()=>gx(I(t)),()=>n(I(t)),()=>hx(I(t)),()=>sc(I(t).tool_count||0),()=>yx(I(t))]),z(e,r)}),T(a),T(i),T(r),z(e,r),D()}var yz=R(`

      MCP Servers

      `),bz=R(``),xz=R(`
      MCP server management is unavailable.
      `),Sz=R(``),Cz=R(`
      `),wz=R(`

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

      `),Tz=R(`

      No MCP servers match your filter.

      `),Ez=R(`
      `);function Dz(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`mcp-servers`&&Q.fetchServers()});var n=Ez(),r=M(n),i=M(r);JS(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,yz())},$$slots:{title:!0}}),T(i);var a=P(i,2),o=M(a),s=e=>{var t=bz();K(M(t),{get icon(){return mo},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,xz())};V(c,e=>{!Q.available&&!q.authError&&e(l)});var u=P(c,2),d=e=>{var t=Sz(),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=>{gT(e,{label:`Loading MCP servers...`})};V(f,e=>{Q.loading&&!q.authError&&e(p)});var m=P(f,2),h=e=>{var t=Cz(),n=M(t);xw(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);pz(g,{});var _=P(g,2);rz(_,{});var v=P(_,2),y=e=>{vz(e,{})};V(v,e=>{Q.filtered.length>0&&Q.available&&!q.authError&&e(y)});var b=P(v,2),x=e=>{z(e,wz())};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,Tz())};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 Oz=`api_keys`,kz=`session_sticky_keys`,Az=`base_url`,jz=`service_account_json`,Mz=`models`,Nz={[Oz]:{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.`},[kz]:{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.`},[Az]:{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.`},[jz]:{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`},[Mz]:{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 Pz(e){return Nz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Fz(){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 Iz(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 Lz(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 Rz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function zz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(Nz).map(e=>({name:e,advanced:e!==Oz})),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={...Pz(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 Bz=new Set([`name`,`type`,`enabled`]);function Vz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Fz(),i={...e};for(let e of Object.keys(r))!Bz.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function Hz(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 Uz(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function Wz(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function Gz(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function Kz(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 qz(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:Wz(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 Jz(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function Yz(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}=zz(r);for(let t of[...o,...s]){let n=Xz(e,t);n&&(i[t.name]=n)}return i}function Xz(e,t){if(t.name===`api_keys`){let n=Gz(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`&&!Jz(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function Zz(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=zz(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]=Qz(e,t.name));for(let t of Object.keys(Nz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=Qz(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function Qz(e,t){switch(t){case Oz:return Gz(e&&e.api_keys);case Mz:return ac(e&&e.models);case kz:return!!(e&&e.session_sticky_keys);case jz: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(Fz()));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 Iz(this.rows,this.filter)}get schema(){return Rz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return zz(e,e&&e.default_base_url)}async fetchTypes(){let e=await yT(`/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 yT(`/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`,Fz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,qz(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Fz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Vz(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=ps(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(){Pc.fetchModels(),Pc.fetchCategories()}async submitForm(){let e=this.schema,t=Yz(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=Zz(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await bT(`/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}J.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 bT(`/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,zs.error=t.error;return}if(t.status===`error`){zs.error=t.error;return}J.success(`Provider "`+e+`" deleted.`),zs.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||zs.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:jo,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},$z=R(`Config`),eB=R(` `,1),tB=R(`
      `),nB=R(`
      NameTypeBase URLAuthModelsEnabledUpdatedActions
      `);function rB(e,t){E(t,!0);var n=nB(),r=M(n),i=P(M(r));H(i,21,()=>$.filteredRows,e=>e.name,(e,t)=>{var n=tB(),r=M(n),i=M(r),a=M(i,!0);T(i);var o=P(i,2),s=e=>{z(e,$z())};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=eB(),r=N(n);{let e=O(()=>`Edit provider `+I(t).name);vT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>$.openEdit(I(t)),children:(e,t)=>{K(e,{get icon(){return fo},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);vT(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 Lo},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)},[()=>Hz(I(t)),()=>Uz(I(t)),()=>fs.formatTimestamp(I(t).updated_at)]),z(e,n)}),T(i),T(r),T(n),z(e,n),D()}var iB=R(``),aB=R(`
      `),oB=R(`
      `,1),sB=R(``),cB=R(``),lB=R(``),uB=R(``),dB=R(``),fB=R(` `),pB=R(` `),mB=R(`
      `);function hB(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=mB(),c=M(s),l=M(c),u=P(l),d=e=>{z(e,iB())};V(u,e=>{t.field.required&&e(d)}),T(c);var f=P(c,2),p=e=>{var t=oB(),a=N(t);H(a,21,()=>$.form.api_keys,oi,(e,t,a)=>{var s=aB(),c=M(s);na(c),W(c,`aria-label`,`API key `+(a+1)),vT(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 jo},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 mo},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=cB(),c=M(s);c.value=c.__value=``,H(P(c),16,()=>I(a),e=>e,(e,t)=>{var n=sB(),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=lB();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=uB();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=dB();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=fB(),i=M(t,!0);T(t),F(()=>{W(t,`id`,I(n)+`-error`),B(i,I(r))}),z(e,t)},b=e=>{var r=pB(),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 gB=R(`

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

      `),_B=R(``),vB=R(` `),yB=R(`Determines which fields the gateway uses to build requests.`),bB=R(` `),xB=R(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),SB=R(`Immutable once created.`),CB=R(`

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

      `),wB=R(`
      Advanced settings
      `),TB=R(`
      `,1);function EB(e,t){E(t,!0);let n=O(()=>Lz($.types,$.form.type)),r=O(()=>$.formFields),i=O(()=>$.fieldErrors.name||``),a=O(()=>$.fieldErrors.type||``);function o(){$.selectType(),$.formMode===`create`&&($.form.name=Kz($.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,gB())},s=O(()=>$.formMode===`edit`?`Edit Provider`:`Add Provider`);SE(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=TB(),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=_B(),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=vB(),n=M(t,!0);T(t),F(()=>B(n,I(a))),z(e,t)},p=e=>{z(e,yB())};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=bB(),n=M(t,!0);T(t),F(()=>B(n,I(i))),z(e,t)},v=e=>{z(e,xB())},y=e=>{z(e,SB())};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,CB())};V(b,e=>{$.form.type||e(x)});var S=P(b,2);H(S,17,()=>I(r).primary,e=>e.name,(e,t)=>{hB(e,{get field(){return I(t)}})});var C=P(S,2),w=M(C);SA(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=wB(),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)=>{hB(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 DB=R(`

      Providers

      `),OB=R(``),kB=R(`
      Provider credential management is unavailable.
      `),AB=R(``),jB=R(`
      `),MB=R(`

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

      `),NB=R(`

      No providers match your filter.

      `),PB=R(`
      `);function FB(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`providers-config`&&$.fetchPage()});var n=PB(),r=M(n),i=M(r);JS(M(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{z(e,DB())},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=OB();K(M(t),{get icon(){return mo},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,kB())};V(c,e=>{!$.available&&!q.needsAuth&&e(l)});var u=P(c,2),d=e=>{var t=AB(),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=>{gT(e,{label:`Loading providers...`})};V(f,e=>{$.loading&&!q.needsAuth&&e(p)});var m=P(f,2),h=e=>{var t=jB(),n=M(t);xw(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);EB(g,{});var _=P(g,2),v=e=>{rB(e,{})};V(_,e=>{$.filteredRows.length>0&&$.available&&!q.needsAuth&&e(v)});var y=P(_,2),b=e=>{z(e,MB())};V(y,e=>{$.rows.length===0&&!$.filter&&!$.loading&&!q.needsAuth&&!$.error&&$.available&&e(b)});var x=P(y,2),S=e=>{z(e,NB())};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 IB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function LB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function RB(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 zB(e){if(RB(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 BB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=RB(t.user_path);if(r)return{error:r};let i=zB(t.user_path),a=LB(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 VB(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 HB(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function UB(e,t=Date.now()){return!e||e.active===!1||HB(e)?!1:!VB(e,t)}function WB(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function GB(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&&!UB(e,i)?!1:!a||WB(e).includes(a))}function KB(e,t){return HB(e)?2:+!UB(e,t)}function qB(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 JB(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function YB(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=KB(e,t),i=KB(n,t);if(r!==i)return r-i;let[a,o]=r===2?[JB(e),JB(n)]:[qB(e),qB(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function XB(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!UB(n,t),0)}function ZB(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var QB=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(()=>YB(GB(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return I(this.#o)}set visibleKeys(e){A(this.#o,e)}#s=O(()=>XB(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(IB()));get form(){return I(this.#p)}set form(e){A(this.#p,e,!0)}#m=k(j(ZB()));get labelsEditor(){return I(this.#m)}set labelsEditor(e){A(this.#m,e,!0)}copyState=yM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await yT(`/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=IB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=IB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=IB()}async submitForm(){let e=BB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await bT(`/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=IB(),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=ZB())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:LB(e.value)};try{let n=await bT(`/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}J.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 bT(`/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,J.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),J.error(n.error);return}J.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 bT(`/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,J.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),J.error(t.error);return}J.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},$B=R(``),eV=R(`

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

      `),tV=R(``),nV=R(``),rV=R(``),iV=R(``),aV=R(`
      `);function oV(e,t){E(t,!0);{let t=O(()=>QB.issuedValue?``:QB.error),n=O(()=>QB.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=O(()=>QB.issuedValue?Ha:mo);SE(e,{get open(){return QB.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return I(t)},get submitting(){return QB.formSubmitting},get submitLabel(){return I(n)},submittingLabel:`Creating...`,get submitIcon(){return I(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>QB.closeForm(),onsubmit:()=>QB.issuedValue?QB.dismissIssuedKey():QB.submitForm(),children:(e,t)=>{var n=Qr(),r=N(n),i=e=>{var t=eV(),n=P(M(t),2),r=M(n),i=M(r,!0);T(r),vL(P(r,2),{get state(){return QB.copyState},onclick:()=>QB.copyIssuedValue()}),T(n);var a=P(n,2),o=e=>{z(e,$B())};V(a,e=>{QB.copyState.error&&e(o)}),T(t),F(()=>B(i,QB.issuedValue)),z(e,t)},a=e=>{var t=aV(),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);JS(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{z(e,tV())},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);JS(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{z(e,nV())},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);JS(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{z(e,rV())},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),wE(P(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=iV();ft(n),da(n,()=>QB.form.description,e=>QB.form.description=e),z(e,n)},$$slots:{default:!0}}),T(t),da(i,()=>QB.form.name,e=>QB.form.name=e),da(o,()=>QB.form.expires_at,e=>QB.form.expires_at=e),da(l,()=>QB.form.user_path,e=>QB.form.user_path=e),da(f,()=>QB.form.labels,e=>QB.form.labels=e),fa(g,()=>QB.form.dashboard_access,e=>QB.form.dashboard_access=e),z(e,t)};V(r,e=>{QB.issuedValue?e(i):e(a,-1)}),z(e,n)},$$slots:{default:!0}})}D()}var sV=R(`

      `),cV=R(`

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

      `,1);function lV(e,t){E(t,!0),SE(e,{get open(){return QB.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return QB.labelsEditor.error},get submitting(){return QB.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>QB.closeLabelsEditor(),onsubmit:()=>QB.submitLabelsEditor(),headerHint:e=>{var t=sV(),n=M(t,!0);T(t),F(()=>B(n,QB.labelsEditor.name)),z(e,t)},children:(e,t)=>{wE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=cV(),r=N(n);na(r),Ue(2),da(r,()=>QB.labelsEditor.value,e=>QB.labelsEditor.value=e),z(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),D()}var uV=R(` `),dV=R(`
      `),fV=R(``),pV=R(`Expired`),mV=R(` `),hV=R(` `,1),gV=R(`Deactivated`),_V=R(`
      `),vV=R(`
      NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
      `);function yV(e,t){E(t,!0);var n=vV(),r=M(n),i=M(r),a=M(i),o=P(M(a),5),s=M(o);K(P(M(s)),{get icon(){return no},width:`13`,height:`13`}),T(s),T(o),Ue(3),T(a),T(i);var c=P(i);H(c,21,()=>QB.visibleKeys,e=>e.id,(e,t)=>{var n=_V();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=dV();H(n,20,()=>I(t).labels||[],e=>e,(e,t)=>{var n=uV(),r=M(n,!0);T(n),F(e=>{Hi(n,e),B(r,t)},[()=>Wy(t)]),z(e,n)}),T(n),z(e,n)},p=e=>{z(e,fV())};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=mV(),r=M(n),i=M(r,!0);T(r);var a=P(r,2),o=e=>{z(e,pV())},s=O(()=>VB(I(t)));V(a,e=>{I(s)&&e(o)}),T(n),F(e=>B(i,e),[()=>mc(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=hV(),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(()=>!!QB.dashboardAccessID);vT(r,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>QB.toggleDashboardAccess(I(t)),get disabled(){return I(n)},children:(e,n)=>{{let n=O(()=>I(t).dashboard_access?To:wo);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);vT(i,{get label(){return I(e)},class:`table-icon-btn`,onclick:()=>QB.openLabelsEditor(I(t)),children:(e,t)=>{K(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=P(i,2);{let e=O(()=>(QB.deactivatingID===I(t).id?`Deactivating API key `:`Deactivate API key `)+I(t).name),n=O(()=>QB.deactivatingID===I(t).id);vT(a,{get label(){return I(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>QB.deactivateKey(I(t)),get disabled(){return I(n)},children:(e,t)=>{K(e,{get icon(){return ho},class:`table-icon-svg`})},$$slots:{default:!0}})}z(e,n)},oe=e=>{var n=gV();F(e=>W(n,`title`,e),[()=>I(t).deactivated_at?`Deactivated on `+hc(I(t).deactivated_at):`Deactivated`]),z(e,n)},se=O(()=>HB(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":HB(I(t))}),()=>I(t).expires_at?hc(I(t).expires_at):``,()=>fs.formatTimestamp(I(t).created_at)]),z(e,n)}),T(c),T(r),T(n),z(e,n),D()}var bV=R(``),xV=R(`
      API key management is unavailable.
      `),SV=R(``),CV=R(`

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

      `),wV=R(`
      `),TV=R(`
      `),EV=R(`

      `),DV=R(`

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

      `),OV=R(`
      `);function kV(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`auth-keys`&&QB.fetchKeys()});var n=OV(),r=M(n),i=P(M(r),2),a=M(i),o=e=>{var t=bV();K(M(t),{get icon(){return mo},class:`table-icon-svg`}),Ue(2),T(t),F(()=>t.disabled=QB.formSubmitting),L(`click`,t,()=>{QB.formSubmitting||QB.openForm()}),z(e,t)};V(a,e=>{QB.available&&!q.authError&&e(o)}),T(i),T(r);var s=P(r,2),c=e=>{z(e,xV())};V(s,e=>{!QB.available&&!q.authError&&e(c)});var l=P(s,2),u=e=>{var t=SV(),n=M(t,!0);T(t),F(()=>B(n,QB.error)),z(e,t)};V(l,e=>{QB.error&&!q.authError&&!QB.formOpen&&e(u)});var d=P(l,2),f=e=>{z(e,CV())};V(d,e=>{QB.available&&!q.authError&&e(f)});var p=P(d,2);oV(p,{});var m=P(p,2);lV(m,{});var h=P(m,2),g=e=>{var t=wV();CS(M(t),{size:18,label:`Loading API keys`}),T(t),z(e,t)};V(h,e=>{QB.loading&&QB.keys.length===0&&e(g)});var _=P(h,2),v=e=>{var t=TV(),n=M(t);xw(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 QB.filter},set value(e){QB.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,`(${QB.inactiveCount??``})`)),z(e,t)};V(s,e=>{QB.inactiveCount>0&&e(c)}),T(o),T(i),T(r),T(t),fa(a,()=>QB.showInactive,e=>QB.showInactive=e),z(e,t)};V(_,e=>{QB.keys.length>0&&QB.available&&e(v)});var y=P(_,2),b=e=>{yV(e,{})};V(y,e=>{QB.visibleKeys.length>0&&QB.available&&e(b)});var x=P(y,2),S=e=>{var t=EV(),n=M(t);T(t),F(()=>B(n,`No API keys match the current filter.${QB.inactiveCount>0&&!QB.showInactive?` `+QB.inactiveCount+` inactive `+(QB.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),z(e,t)};V(x,e=>{QB.keys.length>0&&QB.visibleKeys.length===0&&QB.available&&e(S)});var C=P(x,2),w=e=>{z(e,DV())};V(C,e=>{QB.keys.length===0&&!QB.loading&&!q.authError&&!QB.error&&QB.available&&e(w)}),T(n),z(e,n),D()}Hr([`click`]);var AV=R(`

      Timezone

      `),jV=R(``),MV=R(``),NV=R(`
      `,1);function PV(e,t){E(t,!0);function n(){fs.saveOverride(),q.refresh()}function r(){fs.clearOverride(),q.refresh()}var i=NV(),a=N(i);JS(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,AV())},$$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,()=>fs.options,e=>e.value,(e,t)=>{var n=jV(),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=MV();L(`click`,t,r),z(e,t)};V(f,e=>{fs.override&&e(p)}),T(d),F(e=>B(u,`Automatic (${e??``})`),[()=>fs.detectedTimeZoneLabel()]),Vr(`focus`,c,()=>fs.ensureOptions()),L(`change`,c,n),Gi(c,()=>fs.override,e=>fs.override=e),z(e,i),D()}Hr([`change`,`click`]);var FV=R(``),IV=R(`

      Failover

      `,1);function LV(e,t){E(t,!0);let n=O(()=>Z.failoverSaving||Z.failoverGenerating||Z.failoverDraftSaving||!Z.failoverAvailable||!Z.failoverEnabled());var r=IV(),i=N(r),a=P(M(i),2),o=M(a),s=M(o);K(s,{get icon(){return Fo},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 jo},class:`form-action-icon`}),Ue(2),T(u),T(a),T(i);var d=P(i,2),f=M(d),p=e=>{var t=FV(),n=M(t,!0);T(t),F(()=>B(n,Z.failoverError)),z(e,t)};V(f,e=>{Z.failoverError&&e(p)}),T(d),mj(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 RV(){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 zV(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 BV(){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 VV=R(`

      Budget Resets

      `),HV=R(``),UV=R(`

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

      `),WV=R(``),GV=R(``),KV=R(`
      Monthly
      Weekly
      Daily
      `,1);function qV(e,t){E(t,!0);let n=k(j(RV())),r=k(!1),i=k(!1),a=k(``),o=k(!1),s=O(()=>Cs.budgetsVisible());async function c(){if(await Cs.ensureLoaded(),!Cs.budgetsVisible()){A(a,``);return}A(r,!0),A(a,``);try{let e=await vs(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){A(a,`Unable to load budget settings.`);return}A(n,zV(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 ys(`/admin/budgets/settings`,`PUT`,zV(I(n),I(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){J.error(`Unable to save budget settings.`);return}A(n,zV(e.data,I(n)),!0),A(a,``),J.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),J.error(`Unable to save budget settings.`)}finally{A(i,!1)}}}An(()=>{q.refreshTick,c()});var u=Qr(),d=N(u),f=e=>{var t=KV(),s=N(t),c=M(s);JS(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,VV())},$$slots:{title:!0}});var u=P(c,2),d=M(u),f=P(M(d),2),p=M(f);JS(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,HV())},$$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,UV())};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,BV,e=>e.value,(e,t)=>{var n=WV(),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 vo},class:`form-action-icon`}),Ue(2),T(ue);var de=P(ue,2),fe=e=>{CS(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=GV(),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 JV=R(`

      Reset All Budgets

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

      `);function YV(e,t){E(t,!0);var n=Qr(),r=N(n),i=e=>{var t=JV(),n=P(M(t),2),r=M(n);K(M(r),{get icon(){return _o},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(()=>Cs.budgetsVisible());V(r,e=>{I(a)&&e(i)}),z(e,n),D()}Hr([`click`]);function XV(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function ZV(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 QV(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 $V(e){return e&&e.error&&e.error.message?e.error.message:``}var eH=R(`

      Tagging based on headers

      `),tH=R(`config`),nH=R(``),rH=R(`
      `),iH=R(`

      No tagging headers configured. Requests are not labelled.

      `),aH=R(``),oH=R(`
      `,1);function sH(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(XV())}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 vs(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){A(o,`Unable to load tagging settings.`);return}A(n,ZV(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 ys(`/admin/tagging/settings`,`PUT`,QV(I(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){J.error(e.status!==401&&$V(e.data)||`Unable to save tagging settings.`);return}A(n,ZV(e.data),!0),A(r,e.data&&e.data.editable!==!1,!0),A(o,``),J.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),J.error(`Unable to save tagging settings.`)}finally{A(a,!1)}}}An(()=>{q.refreshTick,l()});var d=oH(),f=N(d),p=M(f);JS(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,eH())},$$slots:{title:!0}});var m=P(p,2),h=M(m);H(h,17,()=>I(n),oi,(e,t,n)=>{var i=rH(),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,tH())},b=e=>{var i=nH();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=>{CS(e,{size:16,label:`Loading tagging settings`})};V(g,e=>{I(i)&&e(_)});var v=P(g,2),y=e=>{z(e,iH())};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 mo},class:`form-action-icon`}),Ue(2),T(x);var S=P(x,2);K(M(S),{get icon(){return vo},class:`form-action-icon`}),Ue(2),T(S),T(b),T(f);var C=P(f,2),w=M(C),ee=e=>{var t=aH(),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 cH(e){let t=e||{};if(t.selectedPreset)return{days:parseInt(t.selectedPreset,10)||30};let n=t.customStartDate?pc(t.customStartDate):``,r=t.customEndDate||t.today||null;return{start_date:n,end_date:r?pc(r):``}}function lH(e,t,n,r){return{...cH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function uH(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 dH=R(`

      Usage Pricing Recalculation

      `),fH=R(`
      `);function pH(e,t){E(t,!0);let n=k(``),r=k(``),i=k(!1),a=O(()=>Cs.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!I(a)){J.error(`Usage pricing recalculation is unavailable.`);return}I(i)||zs.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:La,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!I(a)){J.error(`Usage pricing recalculation is unavailable.`);return}if(!I(i)){A(i,!0);try{let e=await ys(`/admin/usage/recalculate-pricing`,`POST`,lH({selectedPreset:Nc.selectedPreset,customStartDate:Nc.customStartDate,customEndDate:Nc.customEndDate,today:fs.todayDate()},I(n),I(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){zs.error=`Unable to recalculate pricing.`;return}zs.close(),J.success(uH(e.data)),zc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),zs.error=`Unable to recalculate pricing.`}finally{A(i,!1)}}}var c=Qr(),l=N(c),u=e=>{var t=fH(),s=M(t);JS(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,dH())},$$slots:{title:!0}});var c=P(s,2),l=M(c),u=P(M(l),2);nl(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 La},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 mH(e){return String(e&&e.status||`ok`).toLowerCase()}function hH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=mH(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 gH(e){return!!e&&mH(e)===`ok`}function _H(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function vH(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 yH=R(`

      Runtime Refresh

      `),bH=R(`
    • `),xH=R(`
        `),SH=R(`
        `,1);function CH(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 ys(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){J.error(`Runtime refresh failed.`);return}A(r,e.data&&typeof e.data==`object`?e.data:null,!0),gH(I(r))?J.success(hH(I(r))):J.error(hH(I(r))),q.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),J.error(`Runtime refresh failed.`)}finally{A(n,!1)}}}var a=SH(),o=N(a),s=M(o);JS(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,yH())},$$slots:{title:!0}});var c=P(s,2),l=M(c);let u;K(M(l),{get icon(){return go},class:`settings-refresh-icon`}),Ue(2),T(l),T(c),T(o);var d=P(o,2),f=M(d),p=e=>{var t=xH();H(t,21,()=>_H(I(r)),e=>e.name,(e,t)=>{var n=bH(),r=M(n,!0);T(n),F(e=>{U(n,1,`runtime-refresh-step is-${I(t).status??``}`,`svelte-yeq2mp`),B(r,e)},[()=>vH(I(t))]),z(e,n)}),T(t),z(e,t)},m=O(()=>_H(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 wH=R(``),TH=R(`

        `),EH=R(`

        `),DH=R(``),OH=R(`
        `),kH=R(`

        AI Processing

        `);function AH(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 vs(`/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 ys(`/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,J.error(`Unable to save ${e.label}.`);return}A(n,I(n).map(t=>t.key===e.key?i.data:t),!0),J.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),J.error(`Unable to save ${e.label}.`)}finally{A(i,``)}}}An(()=>{q.refreshTick,o()});var c=Qr(),l=N(c),u=e=>{var t=kH(),o=M(t),c=P(M(o),2),l=e=>{var t=wH(),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=OH(),r=M(n),a=M(r),o=M(a,!0);T(a);var c=P(a,2),l=e=>{var n=TH(),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=EH(),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=DH(),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 jH=R(`
        `);function MH(e,t){E(t,!0),An(()=>{q.refreshTick,Yo.page===`settings`&&(fs.ensureOptions(),Cs.ensureLoaded())});var n=jH(),r=P(M(n),2),i=M(r);PV(i,{});var a=P(i,2);LV(a,{});var o=P(a,2);qV(o,{});var s=P(o,2);YV(s,{});var c=P(s,2);sH(c,{});var l=P(c,2);AH(l,{});var u=P(l,2);pH(u,{}),CH(P(u,2),{}),T(r);var d=P(r,2),f=M(d,!0);T(d),T(n),F(e=>B(f,e),[()=>Wo()]),z(e,n),D()}var NH=R(`
        `),PH=R(`
         
        `),FH=R(`
         
        `),IH=R(`
         
        `),LH=R(`
        `),RH=R(`
        `,1),zH=R(`
        `);function BH(e,t){E(t,!0);let n=G(t,`showPromptCache`,3,!0),r=yM({logPrefix:`Failed to copy interaction message:`}),i=O(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=zH();let l;var u=M(c),d=e=>{var r=PH(),i=M(r),a=M(i),c=M(a,!0);T(a);var l=P(a,2),u=M(l,!0);T(l);var d=P(l,2),f=M(d,!0);T(d),T(i);var p=P(i,2),m=e=>{var n=NH(),r=M(n);T(n),F(()=>B(r,`Call ID: ${t.msg.functionCallID??``}`)),z(e,n)};V(p,e=>{t.msg.functionCallID&&e(m)});var h=P(p,2),g=e=>{var n=Qr();H(N(n),17,()=>t.msg.toolCalls,oi,(e,n)=>{var r=Qr(),i=N(r),a=e=>{var r=NH(),i=M(r);T(r),F(()=>B(i,`Call ID${t.msg.toolCalls.length>1?` (`+I(n).name+`)`:``}: ${I(n).id??``}`)),z(e,r)};V(i,e=>{I(n).id&&e(a)}),z(e,r)}),z(e,n)};V(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=P(h,2),v=M(_,!0);T(_),T(r),F((e,n,i,a)=>{W(r,`title`,e),B(c,t.msg.roleLabel),B(u,n),B(f,i),B(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>fs.formatTimestamp(t.msg.timestamp),()=>$I(t.msg)]),z(e,r)},f=e=>{var r=RH(),i=N(r),a=M(i),s=M(a,!0);T(a);var c=P(a,2),l=M(c,!0);T(c),T(i);var u=P(i,2),d=e=>{var r=FH(),i=M(r,!0);T(r),F(e=>{W(r,`title`,e),B(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),z(e,r)};V(u,e=>{t.msg.text&&e(d)});var f=P(u,2),p=e=>{var n=LH();H(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=IH(),r=M(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=NH(),r=M(n);T(n),F(()=>B(r,`Call ID: ${I(t).id??``}`)),z(e,n)};V(c,e=>{I(t).id&&e(l)});var u=P(c,2),d=M(u,!0);T(u),T(n),F((e,n)=>{B(a,I(t).name+`()`),B(s,e),B(d,n)},[()=>tL(I(t))||`No arguments`,()=>tL(I(t))||`No arguments`]),z(e,n)}),T(n),z(e,n)};V(f,e=>{t.msg.toolCalls&&e(p)}),F((e,n)=>{W(i,`title`,e),B(s,t.msg.roleLabel),B(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>fs.formatTimestamp(t.msg.timestamp)]),z(e,r)};V(u,e=>{I(i)?e(d):e(f,-1)});var p=P(u,2);let m;var h=M(p);{let e=O(()=>r.copied?qa:Xa);K(h,{get icon(){return I(e)},width:`14`,height:`14`})}T(p),T(c),F(e=>{U(c,1,Fi([I(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),W(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),W(c,`data-entry-id`,t.msg.entryID),l=Hi(c,``,l,e),m=U(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),W(p,`aria-label`,r.copied?`Message copied`:`Copy message`),W(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),L(`click`,p,e=>{e.stopPropagation(),r.copy(eL(t.msg))}),z(e,c),D()}Hr([`click`]);function VH(e,t=0){let n=Math.max(0,GH(e)-Math.max(0,GH(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function HH(e,t,n=0){let r=VH(t,n),i=GH(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function UH(e,t,n=0){return HH(GH(t)-GH(e),t,n)}function WH(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=GH(t),a=0;e.forEach((e,t)=>{GH(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=GH(e[c])0&&s===c&&l?`end`:`start`}}function GH(e){let t=Number(e);return Number.isFinite(t)?t:0}var KH=R(`
        `),qH=R(`
        `),JH=R(`

        Loading interactions...

        `),YH=R(`

        No interaction data available for this entry.

        `),XH=R(``),ZH=R(`
        `,1),QH=R(`

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

        `),$H=R(`
        `),eU=R(``),tU=R(``),nU=R(``);function rU(e,t){E(t,!0);let n=lL,r=Number(wa(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=k(j(a)),s=k(320),c=k(760),l=k(!1),u=k(!1),d=k(wa(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=lP(180);return t?Js(e,{x:I(o),duration:r,easing:Zs}):n?{duration:0}:Ys(e,{axis:`x`,duration:r,easing:Zs})}async function m(e){if(e===I(l))return;let t=I(l)&&!e;A(u,t,!0),A(l,e,!0),t&&(await Cr(),A(u,!1))}function h(){A(d,!I(d)),Ta(i,I(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=VH(window.innerWidth,e);A(s,t.min,!0),A(c,t.max,!0),A(o,HH(a,window.innerWidth,e),!0)}function v(e){A(o,UH(e,window.innerWidth,g()),!0),a=I(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),Ta(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=I(o)+(e.key===`ArrowLeft`?24:-24),_(),a=I(o),Ta(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=WH(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:lP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}An(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!Aa.anyOpen&&(I(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),An(()=>{n.conversationOpen||A(l,!1)}),An(()=>{if(!I(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),An(()=>{Yo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var ee=Qr(),te=N(ee),ne=e=>{var t=Qr();H(N(t),16,()=>[I(l)],e=>e,(e,t)=>{var r=nU();let i,a;var l=M(r),f=P(l,2),g=M(f),_=P(M(g),2),v=M(_);let w;T(_),T(g);var ee=P(g,2),te=M(ee),ne=M(te);{let e=O(()=>t?co:so);K(ne,{get icon(){return I(e)},class:`table-icon-svg`})}T(te),As(P(te,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),T(ee),T(f);var re=P(f,2),ie=M(re),ae=e=>{var t=KH(),n=M(t);K(M(n),{get icon(){return Fa},width:`14`,height:`14`}),T(n);var r=P(n,2);K(M(r),{get icon(){return Ma},width:`14`,height:`14`}),T(r),T(t),L(`click`,n,()=>C(-1)),L(`click`,r,()=>C(1)),z(e,t)};V(ie,e=>{n.conversationMessages.length>1&&e(ae)});var oe=P(ie,2),se=e=>{var t=qH(),r=M(t,!0);T(t),F(()=>B(r,n.conversationError)),z(e,t)};V(oe,e=>{n.conversationError&&e(se)});var ce=P(oe,2),le=e=>{z(e,JH())};V(ce,e=>{n.conversationLoading&&e(le)});var ue=P(ce,2),de=e=>{z(e,YH())},fe=O(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());V(ue,e=>{I(fe)&&e(de)});var pe=P(ue,2),me=e=>{var t=ZH(),r=N(t),i=e=>{var t=XH(),n=M(t);let r;Ue(2),T(t),F(()=>{W(t,`aria-checked`,I(d)),W(t,`title`,(I(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=U(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":I(d)})}),L(`click`,t,h),z(e,t)},a=O(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));V(r,e=>{I(a)&&e(i)});var o=P(r,2);H(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{BH(e,{get msg(){return I(t)},get showPromptCache(){return I(d)}})}),T(o),ga(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),z(e,t)};V(pe,e=>{n.conversationMessages.length>0&&e(me)});var he=P(pe,2),ge=e=>{z(e,QH())};V(he,e=>{n.conversationTruncated&&e(ge)});var _e=P(he,2),ve=e=>{var t=$H(),r=P(M(t),2),i=M(r,!0);T(r),T(t),F(e=>B(i,e),[()=>n.conversationLiveStatusText()]),z(e,t)},ye=O(()=>n.conversationLiveWaiting());V(_e,e=>{I(ye)&&e(ve)}),T(re);var be=P(re,2),xe=e=>{var t=tU(),r=M(t),i=M(r);ft(i);var a=P(i,2),o=e=>{var t=eU(),r=M(t,!0);T(t),F(()=>B(r,n.followUpError)),z(e,t)};V(a,e=>{n.followUpError&&e(o)});var s=P(a,2),c=M(s),l=M(c,!0);T(c);var u=P(c,2),d=M(u,!0);T(u),T(s),T(r),T(t),F((e,t,r)=>{i.disabled=e,B(l,t),u.disabled=r,B(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Vr(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),da(i,()=>n.followUpText,e=>n.followUpText=e),z(e,t)},Se=O(()=>n.conversationAnchorID&&n.followUpKind());V(be,e=>{I(Se)&&e(xe)}),T(r),ga(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),F(()=>{i=U(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),W(r,`role`,t?`dialog`:void 0),W(r,`aria-modal`,t?`true`:void 0),a=Hi(r,``,a,{"--conversation-panel-width":I(o)+`px`}),W(l,`aria-valuemin`,I(s)),W(l,`aria-valuemax`,I(c)),W(l,`aria-valuenow`,I(o)),W(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),W(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=U(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),W(te,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),W(te,`title`,t?`Exit fullscreen`:`Fullscreen`),W(te,`aria-pressed`,t)}),L(`pointerdown`,l,y),L(`pointermove`,l,b),L(`pointerup`,l,x),Vr(`pointercancel`,l,x),Vr(`lostpointercapture`,l,x),L(`keydown`,l,S),L(`click`,te,()=>m(!t)),ki(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&I(u)})),z(e,r)}),z(e,t)};V(te,e=>{n.conversationOpen&&e(ne)}),z(e,ee),D()}Hr([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var iU=R(`
        `,1);function aU(e,t){E(t,!0);let n={overview:vC,usage:mT,budgets:WE,"rate-limits":tO,models:Lj,workflows:iP,"audit-logs":eR,guardrails:qR,"mcp-servers":Dz,"providers-config":FB,"auth-keys":kV,settings:MH};fs.init(),Nc.init(),q.init(),Oa.init(),ka.init(),Yo.init(),An(()=>{q.refreshTick,Cs.fetch(),Pc.fetchModels(),Pc.fetchCategories()}),An(()=>{document.body.classList.toggle(`dashboard-modal-open`,Aa.anyOpen)});let r=O(()=>n[Yo.page]||vC);var i=iU(),a=N(i);Os(a,{});var o=P(a,2);let s;var c=M(o);ic(c,{}),_i(P(c,2),()=>I(r),(e,t)=>{t(e,{})}),T(o);var l=P(o,2);rU(l,{});var u=P(l,2);Ls(u,{});var d=P(u,2);Us(d,{}),nc(P(d,2),{}),F(()=>s=U(o,1,`content`,null,s,{"interactions-open":lL.conversationOpen})),z(e,i),D()}ti(aU,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/assets/index-DM1VKejK.css b/internal/admin/dashboard/static/dist/assets/index-DM1VKejK.css new file mode 100644 index 000000000..4d4239f7e --- /dev/null +++ b/internal/admin/dashboard/static/dist/assets/index-DM1VKejK.css @@ -0,0 +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{height:100vh;min-height:0;display:flex;overflow:hidden}.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{-webkit-overflow-scrolling:touch;flex:1 1 0;width:100%;min-width:0;min-height:0;padding:32px;transition:width .2s;overflow-y:auto;container:dashboard-content/inline-size}.content>*{width:100%;max-width:1336px;margin-inline:auto}body.dashboard-modal-open .content{overflow-y:hidden}.content.interactions-open>*{max-width:none}.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)}#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}.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:hidden auto}.sidebar.sidebar-resizing.svelte-1nwtzae{transition:none}.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}.nav-label.svelte-1nwtzae{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.sidebar-footer.svelte-1nwtzae{border-top:1px solid var(--border);padding:16px}.api-key-section.svelte-1nwtzae{gap:8px;display:grid}.external-auth-section.svelte-1nwtzae{gap:8px;margin-top:8px;display:grid}.external-auth-user.svelte-1nwtzae{min-width:0;color:var(--text-muted);align-items:center;gap:8px;font-size:12px;display:flex}.external-auth-user.svelte-1nwtzae span:where(.svelte-1nwtzae){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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:ew-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.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.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-label:where(.svelte-1nwtzae){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),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .external-auth-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) .nav-label:where(.svelte-1nwtzae){display:none}.sidebar-footer.svelte-1nwtzae{gap:8px;padding:8px;display:grid}.sidebar-footer.svelte-1nwtzae .api-key-section:where(.svelte-1nwtzae),.sidebar-footer.svelte-1nwtzae .external-auth-section:where(.svelte-1nwtzae),.sidebar.sidebar-collapsed.svelte-1nwtzae .sidebar-footer:where(.svelte-1nwtzae) .external-auth-section:where(.svelte-1nwtzae){display:grid}.sidebar-footer.svelte-1nwtzae .external-auth-user:where(.svelte-1nwtzae){display:none}.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)}}.external-login-btn.svelte-1dsu6u0{justify-content:center;width:100%;text-decoration:none}.auth-dialog-separator.svelte-1dsu6u0{color:var(--text-muted);align-items:center;gap:10px;font-size:12px;display:flex}.auth-dialog-separator.svelte-1dsu6u0:before,.auth-dialog-separator.svelte-1dsu6u0:after{content:"";border-top:1px solid var(--border);flex:1}.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-has-interactions.svelte-17mysgz{padding-right:44px}.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;flex-shrink:0;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:0;border-left:1px solid var(--border);background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:32px;height:100%;color:var(--accent);cursor:pointer;border-radius:0;justify-content:center;align-items:center;margin:0;transition:background .1s ease-out,color .1s ease-out;display:inline-flex;position:absolute;inset:0 0 0 auto}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg))}.audit-conversation-trigger-active.svelte-17mysgz{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 28%, var(--bg));border-left:0}.audit-conversation-trigger-active.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 34%, var(--bg))}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:18px;height:18px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-request-badge.svelte-17mysgz{white-space:nowrap;gap:6px;min-width:0}.audit-timestamp-time.svelte-17mysgz{display:none}.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}@container dashboard-content (width<=699px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}.audit-request-status.svelte-17mysgz,.audit-timestamp-full.svelte-17mysgz{display:none}.audit-timestamp-time.svelte-17mysgz{display:inline}}.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)}@container dashboard-content (width<=699px){.audit-pane-split.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-width:2px;border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.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}.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}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 42px 10px 12px;position:relative;overflow:hidden}.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-message.svelte-12s99s5:before,.chat-function-note.svelte-12s99s5:before{content:"";z-index:0;pointer-events:none;opacity:var(--prompt-cache-visibility);background:linear-gradient(90deg, color-mix(in srgb, var(--prompt-cache-color) 18%, transparent) 0, color-mix(in srgb, var(--prompt-cache-color) 18%, transparent) var(--prompt-cache-fill), transparent var(--prompt-cache-fill), transparent 100%);transition:opacity .15s;position:absolute;inset:0}.chat-message.svelte-12s99s5>:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5>:where(.svelte-12s99s5){z-index:1;position:relative}.chat-message-copy.svelte-12s99s5{z-index:2;border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 92%, transparent);width:26px;height:26px;color:var(--text-muted);opacity:0;pointer-events:none;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:opacity .12s,transform .12s,color .12s,background-color .12s,border-color .12s;display:inline-flex;position:absolute;bottom:6px;right:6px;transform:translateY(3px)}.chat-message.svelte-12s99s5:hover .chat-message-copy:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5:hover .chat-message-copy:where(.svelte-12s99s5),.chat-message.svelte-12s99s5:focus-within .chat-message-copy:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5:focus-within .chat-message-copy:where(.svelte-12s99s5),.chat-message-copy.is-copied.svelte-12s99s5{opacity:1;pointer-events:auto;transform:translateY(0)}.chat-message-copy.svelte-12s99s5:hover{color:var(--text);background:var(--bg-surface-hover)}.chat-message-copy.svelte-12s99s5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:1px}.chat-message-copy.is-copied.svelte-12s99s5{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border))}.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);border-radius:5px;min-width:0;padding:3px 5px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;position:relative;overflow:hidden}.chat-tool-call-summary.svelte-12s99s5{cursor:pointer;align-items:baseline;gap:6px;min-width:0;display:flex}.chat-tool-call-preview.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;opacity:.8;flex:1;min-width:0;overflow:hidden}.chat-tool-call-arguments.svelte-12s99s5{background:color-mix(in srgb, var(--border) 45%, transparent);color:var(--text);font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;max-height:200px;margin-top:5px;padding:6px 8px;line-height:1.45;overflow:auto}.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 42px 4px 12px;font-size:12px;position:relative;overflow:hidden}.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;min-height:26px;display:flex;overflow:hidden}.chat-function-note-inner.svelte-12s99s5 .chat-time:where(.svelte-12s99s5){flex-shrink:0;margin-left:auto}.chat-function-call-id.svelte-12s99s5{color:var(--text-muted);overflow-wrap:anywhere;margin-top:6px;font-size:10px}.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-label.svelte-12s99s5:before{content:"▸";margin-right:4px;transition:transform .12s;display:inline-block}.chat-function-note-details[open].svelte-12s99s5 .chat-function-label:where(.svelte-12s99s5):before{transform:rotate(90deg)}.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%}}@media (hover:none){.chat-message-copy.svelte-12s99s5{opacity:1;pointer-events:auto;transform:none}}@media (prefers-reduced-motion:reduce){.chat-message-copy.svelte-12s99s5{transition:none}}.conversation-drawer.svelte-ssrzja{width:var(--conversation-panel-width);background:var(--bg-surface);border-left:1px solid var(--border);z-index:12;flex-direction:column;flex:none;min-width:0;height:100vh;display:flex;position:sticky;top:0}.conversation-drawer-fullscreen.svelte-ssrzja{z-index:70;border-left:0;flex-basis:auto;width:100vw;height:100dvh;position:fixed;inset:0}.conversation-drawer-fullscreen.svelte-ssrzja .conversation-resize-handle:where(.svelte-ssrzja){display:none}.conversation-resize-handle.svelte-ssrzja{z-index:2;cursor:col-resize;touch-action:none;background:0 0;border:0;border-radius:0;outline:none;width:10px;padding:0;position:absolute;top:0;bottom:0;left:-5px}.conversation-resize-handle.svelte-ssrzja:after{content:"";background:0 0;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:4px}.conversation-resize-handle.svelte-ssrzja:hover:after,.conversation-resize-handle.svelte-ssrzja:focus-visible:after{background:color-mix(in srgb, var(--accent) 70%, var(--border))}body.conversation-panel-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.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-actions.svelte-ssrzja{align-items:center;gap:6px;display:flex}.conversation-drawer-title.svelte-ssrzja{align-items:center;gap:9px;min-width:0;display:flex}.conversation-follow-status.svelte-ssrzja{justify-content:center;align-items:center;margin:-4px;padding:4px;display:inline-flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}#interactions-drawer-content.svelte-ssrzja{position:relative}.conversation-message-navigation.svelte-ssrzja{z-index:4;opacity:0;pointer-events:none;flex-direction:column;gap:4px;width:max-content;height:0;margin-left:auto;margin-right:12px;transition:opacity .12s,transform .12s;display:flex;position:sticky;top:12px;transform:translateY(-3px)}#interactions-drawer-content.svelte-ssrzja:hover .conversation-message-navigation:where(.svelte-ssrzja),.conversation-message-navigation.svelte-ssrzja:focus-within{opacity:1;pointer-events:auto;transform:translateY(0)}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja){border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 94%, transparent);width:30px;height:30px;min-height:30px;color:var(--text-muted);border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;box-shadow:0 1px 3px #00000029}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja):hover{color:var(--text);background:var(--bg-surface-hover)}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja):focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:1px}.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 textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:50px;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-cache-legend.svelte-ssrzja{color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;margin:12px 16px 0;padding:0;font-family:inherit;font-size:11px;display:flex}.conversation-cache-legend.svelte-ssrzja:hover{color:var(--text)}.conversation-cache-legend.svelte-ssrzja:focus-visible{outline:2px solid color-mix(in srgb, var(--prompt-cache-color) 35%, transparent);outline-offset:3px;border-radius:3px}.conversation-cache-switch.svelte-ssrzja{background:color-mix(in srgb, var(--text-muted) 30%, var(--border));border-radius:999px;flex:none;width:28px;height:16px;transition:background-color .15s;position:relative}.conversation-cache-switch.is-active.svelte-ssrzja{background:color-mix(in srgb, var(--prompt-cache-color) 80%, var(--bg))}.conversation-cache-switch-thumb.svelte-ssrzja{background:#fff;border-radius:50%;width:12px;height:12px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0000003d}.conversation-cache-switch.is-active.svelte-ssrzja .conversation-cache-switch-thumb:where(.svelte-ssrzja){transform:translate(12px)}.conversation-cache-estimate.svelte-ssrzja{opacity:.75}.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}@media (hover:none){.conversation-message-navigation.svelte-ssrzja{opacity:1;pointer-events:auto;transform:none}}@media (prefers-reduced-motion:reduce){.conversation-message-navigation.svelte-ssrzja{transition:none}} diff --git a/internal/admin/dashboard/static/dist/assets/index-DbvfJbHk.js b/internal/admin/dashboard/static/dist/assets/index-DbvfJbHk.js new file mode 100644 index 000000000..371493809 --- /dev/null +++ b/internal/admin/dashboard/static/dist/assets/index-DbvfJbHk.js @@ -0,0 +1,68 @@ +(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,T=65536,ee=1<<19,te=1<<20,ne=1<<25,re=65536,ie=1<<21,ae=1<<22,oe=1<<23,se=Symbol(`$state`),ce=Symbol(`legacy props`),le=Symbol(``),ue=Symbol(`attributes`),de=Symbol(`class`),fe=Symbol(`style`),pe=Symbol(`text`),me=Symbol(`form reset`),he=new class extends Error{name=`StaleReactionError`;message="The reaction that called `getAbortSignal()` was re-run or destroyed"},ge=!!globalThis.document?.contentType&&globalThis.document.contentType.includes(`xml`);function _e(){throw Error(`https://svelte.dev/e/async_derived_orphan`)}function ve(e,t,n){throw Error(`https://svelte.dev/e/each_key_duplicate`)}function ye(e){throw Error(`https://svelte.dev/e/effect_in_teardown`)}function be(){throw Error(`https://svelte.dev/e/effect_in_unowned_derived`)}function xe(e){throw Error(`https://svelte.dev/e/effect_orphan`)}function Se(){throw Error(`https://svelte.dev/e/effect_update_depth_exceeded`)}function Ce(e){throw Error(`https://svelte.dev/e/props_invalid_value`)}function we(){throw Error(`https://svelte.dev/e/state_descriptors_fixed`)}function Te(){throw Error(`https://svelte.dev/e/state_prototype_fixed`)}function Ee(){throw Error(`https://svelte.dev/e/state_unsafe_mutation`)}function De(){throw Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`)}var Oe={},ke=Symbol(`uninitialized`),Ae=`http://www.w3.org/1999/xhtml`,je=`http://www.w3.org/2000/svg`,Me=`http://www.w3.org/1998/Math/MathML`;function Ne(){console.warn(`https://svelte.dev/e/derived_inert`)}function Pe(e){console.warn(`https://svelte.dev/e/hydration_mismatch`)}function Fe(){console.warn(`https://svelte.dev/e/select_multiple_invalid_value`)}function Ie(){console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`)}var Le=!1;function Re(e){Le=e}var ze;function Be(e){if(e===null)throw Pe(),Oe;return ze=e}function Ve(){return Be(yn(ze))}function E(e){if(Le){if(yn(ze)!==null)throw Pe(),Oe;ze=e}}function He(e=1){if(Le){for(var t=e,n=ze;t--;)n=yn(n);ze=n}}function Ue(e=!0){for(var t=0,n=ze;;){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=yn(n);e&&n.remove(),n=i}}function We(e){if(!e||e.nodeType!==8)throw Pe(),Oe;return e.data}function Ge(e){return e===this.v}function Ke(e,t){return e==e?e!==t||typeof e==`object`&&!!e||typeof e==`function`:t==t}function qe(e){return!Ke(e,this.v)}var Je=null;function Ye(e){Je=e}function D(e,t=!1,n){Je={p:Je,i:!1,c:null,e:null,s:e,x:null,r:rr,l:null}}function O(e){var t=Je,n=t.e;if(n!==null){t.e=null;for(var r of n)An(r)}return e!==void 0&&(t.x=e),t.i=!0,Je=t.p,e??{}}function Xe(){return!0}var Ze=[];function Qe(){var e=Ze;Ze=[],p(e)}function $e(e){if(Ze.length===0&&!Rt){var t=Ze;queueMicrotask(()=>{t===Ze&&Qe()})}Ze.push(e)}function et(){for(;Ze.length>0;)Qe()}function tt(e){var t=rr;if(t===null)return er.f|=oe,e;if(!(t.f&32768)&&!(t.f&4))throw e;nt(e,t)}function nt(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 rt=~(y|b|v);function it(e,t){e.f=e.f&rt|t}function at(e){e.f&512||e.deps===null?it(e,v):it(e,b)}function ot(e){if(e!==null)for(let t of e)!(t.f&2)||!(t.f&65536)||(t.f^=re,ot(t.deps))}function st(e,t,n){e.f&2048?t.add(e):e.f&4096&&n.add(e),ot(e.deps),it(e,v)}var ct=!1;function lt(e){var t=ct;try{return ct=!1,[e(),ct]}finally{ct=t}}function ut(e,t){if(t){let t=document.body;e.autofocus=!0,$e(()=>{document.activeElement===t&&e.focus()})}}function dt(e){Le&&vn(e)!==null&&bn(e)}var ft=!1;function pt(){ft||(ft=!0,document.addEventListener(`reset`,e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(let t of e.target.elements)t[me]?.()})},{capture:!0}))}function mt(e){var t=er,n=rr;nr(null),ir(null);try{return e()}finally{nr(t),ir(n)}}function ht(e,t,n,r=n){e.addEventListener(t,()=>mt(n));let i=e[me];i?e[me]=()=>{i(),r(!0)}:e[me]=()=>r(!0),pt()}function gt(e){let t=0,n=rn(0),r;return()=>{Dn()&&(L(n),Fn(()=>(t===0&&(r=Tr(()=>e(()=>cn(n)))),t+=1,()=>{$e(()=>{--t,t===0&&(r?.(),r=void 0,cn(n))})})))}}var _t=T|ee;function vt(e,t,n,r){new yt(e,t,n,r)}var yt=class{parent;is_pending=!1;transform_error;#e;#t=Le?ze: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=gt(()=>(this.#m=rn(this.#l),()=>{this.#m=null}));constructor(e,t,n,r){this.#e=e,this.#n=t,this.#r=e=>{var t=rr;t.b=this,t.f|=128,n(e)},this.parent=rr.b,this.transform_error=r??this.parent?.transform_error??(e=>e),this.#i=In(()=>{if(Le){let e=this.#t;Ve();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()},_t),Le&&(this.#e=ze)}#g(){try{this.#a=Rn(()=>this.#r(this.#e))}catch(e){this.error(e)}}#_(e){let t=this.#n.failed;t&&(this.#s=Rn(()=>{t(this.#e,()=>e,()=>()=>{})}))}#v(){let e=this.#n.pending;e&&(this.is_pending=!0,this.#o=Rn(()=>e(this.#e)),$e(()=>{var e=this.#c=document.createDocumentFragment(),t=_n();e.append(t),this.#a=this.#x(()=>Rn(()=>this.#r(t))),this.#u===0&&(this.#e.before(e),this.#c=null,Gn(this.#o,()=>{this.#o=null}),this.#b(Pt))}))}#y(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#l=0,this.#a=Rn(()=>{this.#r(this.#e)}),this.#u>0){var e=this.#c=document.createDocumentFragment();Yn(this.#a,e);let t=this.#n.pending;this.#o=Rn(()=>t(this.#e))}else this.#b(Pt)}catch(e){this.error(e)}}#b(e){this.is_pending=!1,e.transfer_effects(this.#f,this.#p)}defer_effect(e){st(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=rr,n=er,r=Je;ir(this.#i),nr(this.#i),Ye(this.#i.ctx);try{return Wt.ensure(),e()}catch(e){return tt(e),null}finally{ir(t),nr(n),Ye(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&&Gn(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,$e(()=>{this.#d=!1,this.#m&&on(this.#m,this.#l)}))}get_effect_pending(){return this.#h(),L(this.#m)}error(e){if(!this.#n.onerror&&!this.#n.failed)throw e;Pt?.is_fork?(this.#a&&Pt.skip_effect(this.#a),this.#o&&Pt.skip_effect(this.#o),this.#s&&Pt.skip_effect(this.#s),Pt.oncommit(()=>{this.#C(e)})):this.#C(e)}#C(e){this.#a&&=(Hn(this.#a),null),this.#o&&=(Hn(this.#o),null),this.#s&&=(Hn(this.#s),null),Le&&(Be(this.#t),He(),Be(Ue()));var t=this.#n.onerror;let n=this.#n.failed;var r=!1,i=!1;let a=()=>{if(r){Ie();return}r=!0,i&&De(),this.#s!==null&&Gn(this.#s,()=>{this.#s=null}),this.#x(()=>{this.#y()})},o=e=>{try{i=!0,t?.(e,a),i=!1}catch(e){nt(e,this.#i&&this.#i.parent)}n&&(this.#s=this.#x(()=>{try{return Rn(()=>{var t=rr;t.b=this,t.f|=128,n(this.#e,()=>e,()=>a)})}catch(e){return nt(e,this.#i.parent),null}}))};$e(()=>{var t;try{t=this.transform_error(e)}catch(e){nt(e,this.#i&&this.#i.parent);return}typeof t==`object`&&t&&typeof t.then==`function`?t.then(o,e=>nt(e,this.#i&&this.#i.parent)):o(t)})}};function bt(e,t,n,r){let i=Xe()?wt:Dt;var a=e.filter(e=>!e.settled),o=t.map(i);if(n.length===0&&a.length===0){r(o);return}var s=rr,c=xt(),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){nt(e,s)}St()}}var d=Ct();if(n.length===0){l.then(()=>u([])).finally(d);return}function f(){Promise.all(n.map(e=>Et(e))).then(u).catch(e=>nt(e,s)).finally(d)}l?l.then(()=>{c(),f(),St()}):f()}function xt(){var e=rr,t=er,n=Je,r=Pt;return function(i=!0){ir(e),nr(t),Ye(n),i&&!(e.f&16384)&&(r?.activate(),r?.apply())}}function St(e=!0){ir(null),nr(null),Ye(null),e&&Pt?.deactivate()}function Ct(){var e=rr,t=e.b,n=Pt,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 wt(e){var t=2|y;return rr!==null&&(rr.f|=ee),{ctx:Je,deps:null,effects:null,equals:Ge,f:t,fn:e,reactions:null,rv:0,v:ke,wv:0,parent:rr,ac:null}}var Tt=Symbol(`obsolete`);function Et(e,t,n){let r=rr;r===null&&_e();var i=void 0,a=rn(ke),o=!er,s=new Set;return Pn(()=>{var t=rr,n=m();i=n.promise;try{Promise.resolve(e()).then(n.resolve,e=>{e!==he&&n.reject(e)}).finally(St)}catch(e){n.reject(e),St()}var c=Pt;if(o){if(t.f&32768)var l=Ct();if(r.b?.is_rendered())c.async_deriveds.get(t)?.reject(Tt);else for(let e of s.values())e.reject(Tt);s.add(n),c.async_deriveds.set(t,n)}let u=(e,t=void 0)=>{l?.(),s.delete(n),t!==Tt&&(c.activate(),t?(a.f|=oe,on(a,t)):(a.f&8388608&&(a.f^=oe),on(a,e)),c.deactivate())};n.promise.then(u,e=>u(null,e||`unknown`))}),On(()=>{for(let e of s)e.reject(Tt)}),new Promise(e=>{function t(n){function r(){n===i?e(a):t(i)}n.then(r,r)}t(i)})}function k(e){let t=wt(e);return or(t),t}function Dt(e){let t=wt(e);return t.equals=qe,t}function Ot(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n{t.ac.abort(he),t.ac=null}),t.fn!==null&&(t.teardown=f),br(t,0),Bn(t))}function Mt(e){if(e.effects!==null)for(let t of e.effects)t.teardown&&t.fn!==null&&xr(t)}var Nt=null,Pt=null,Ft=null,It=null,Lt=null,Rt=!1,zt=!1,Bt=null,Vt=null,Ht=0,Ut=1,Wt=class e{id=Ut++;#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(){Nt===null?Nt=this:(Nt.#n=this,this.#t=Nt),Nt=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)it(r,y),t(r);for(r of n.m)it(r,b),t(r)}this.#p.add(e)}#g(){this.#e=!0,Ht++>1e3&&(this.#x(),Kt());for(let e of this.#u)this.#d.delete(e),it(e,y),this.schedule(e);for(let e of this.#d)it(e,b),this.schedule(e);let t=this.#c;this.#c=[],this.apply();var n=Bt=[],r=[],i=Vt=[];for(let e of t)try{this.#_(e,n,r)}catch(t){throw $t(e),this.#h()||this.discard(),t}if(Pt=null,i.length>0){var a=e.ensure();for(let e of i)a.schedule(e)}if(Bt=null,Vt=null,this.#h()){this.#b(r),this.#b(n);for(let[e,t]of this.#f)Qt(e,t);i.length>0&&Pt.#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(),Ft=this,Jt(r),Jt(n),Ft=null,this.#s?.resolve();var s=Pt;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):gr(r)&&(i&16&&this.#d.add(r),xr(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),it(i,y),this.schedule(i))}}};for(let e of this.current.keys())t(e);this.oncommit(()=>e.discard()),e.#x(),Pt=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(Pt===null){let t=Pt=new e;!zt&&!Rt&&$e(()=>{t.#e||t.flush()})}return Pt}apply(){It=null}schedule(e){if(Lt=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(Bt!==null&&t===rr&&(er===null||!(er.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?Nt=e:t.#t=e,this.linked=!1}}};function Gt(e){var t=Rt;Rt=!0;try{var n;for(e&&(Pt!==null&&!Pt.is_fork&&Pt.flush(),n=e());;){if(et(),Pt===null)return n;Pt.flush()}}finally{Rt=t}}function Kt(){try{Se()}catch(e){nt(e,Lt)}}var qt=null;function Jt(e){var t=e.length;if(t!==0){for(var n=0;n0)){tn.clear();for(let e of qt){if(e.f&24576)continue;let t=[e],n=e.parent;for(;n!==null;)qt.has(n)&&(qt.delete(n),t.push(n)),n=n.parent;for(let e=t.length-1;e>=0;e--){let n=t[e];n.f&24576||xr(n)}}qt.clear()}}qt=null}}function Yt(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?Yt(i,t,n,r):e&4194320&&!(e&2048)&&Xt(i,t,r)&&(it(i,y),Zt(i))}}function Xt(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&&Xt(i,t,r))return r.set(i,!0),!0}return r.set(e,!1),!1}function Zt(e){Pt.schedule(e)}function Qt(e,t){if(!(e.f&32&&e.f&1024)){e.f&2048?t.d.push(e):e.f&4096&&t.m.push(e),it(e,v);for(var n=e.first;n!==null;)Qt(n,t),n=n.next}}function $t(e){it(e,v);for(var t=e.first;t!==null;)$t(t),t=t.next}var en=new Set,tn=new Map,nn=!1;function rn(e,t){return{f:0,v:e,reactions:null,equals:Ge,rv:0,wv:0}}function A(e,t){let n=rn(e,t);return or(n),n}function an(e,t=!1,n=!0){let r=rn(e);return t||(r.equals=qe),r}function j(e,t,n=!1){return er!==null&&(!tr||er.f&131072)&&Xe()&&er.f&4325394&&(ar===null||!ar.has(e))&&Ee(),on(e,n?M(t):t,Vt)}function on(e,t,n=null){if(!e.equals(t)){tn.set(e,Qn?t:e.v);var r=Wt.ensure();if(r.capture(e,t),e.f&2){let t=e;e.f&2048&&kt(t),It===null&&at(t)}e.wv=hr(),ln(e,y,n),Xe()&&rr!==null&&rr.f&1024&&!(rr.f&96)&&(lr===null?ur([e]):lr.push(e)),!r.is_fork&&en.size>0&&!nn&&sn()}return t}function sn(){nn=!1;for(let e of en){e.f&1024&&it(e,b);let t;try{t=gr(e)}catch{t=!0}t&&xr(e)}en.clear()}function cn(e){j(e,e.v+1)}function ln(e,t,n){var r=e.reactions;if(r!==null)for(var i=Xe(),a=r.length,o=0;o{if(pr===d)return e();var t=er,n=pr;nr(null),mr(d);var r=e();return nr(t),mr(n),r};return i&&r.set(`length`,A(t.length,u)),new Proxy(t,{defineProperty(e,t,n){(!(`value`in n)||n.configurable===!1||n.enumerable===!1||n.writable===!1)&&we();var i=r.get(t);return i===void 0?f(()=>{var e=A(n.value,u);return r.set(t,e),e}):j(i,n.value,!0),!0},deleteProperty(e,t){var n=r.get(t);if(n===void 0){if(t in e){let e=f(()=>A(ke,u));r.set(t,e),cn(o)}}else j(n,ke),cn(o);return!0},get(e,n,i){if(n===se)return t;var o=r.get(n),s=n in e;if(o===void 0&&(!s||a(e,n)?.writable)&&(o=f(()=>A(M(s?e[n]:ke),u)),r.set(n,o)),o!==void 0){var c=L(o);return c===ke?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=L(i))}else if(n===void 0){var a=r.get(t),o=a?.v;if(a!==void 0&&o!==ke)return{enumerable:!0,configurable:!0,value:o,writable:!0}}return n},has(e,t){if(t===se)return!0;var n=r.get(t),i=n!==void 0&&n.v!==ke||Reflect.has(e,t);return(n!==void 0||rr!==null&&(!i||a(e,t)?.writable))&&(n===void 0&&(n=f(()=>A(i?M(e[t]):ke,u)),r.set(t,n)),L(n)===ke)?!1:i},set(e,t,n,s){var c=r.get(t),l=t in e;if(i&&t===`length`)for(var d=n;dA(ke,u)),r.set(d+``,p)):j(p,ke)}if(c===void 0)(!l||a(e,t)?.writable)&&(c=f(()=>A(void 0,u)),j(c,M(n)),r.set(t,c));else{l=c.v!==ke;var m=f(()=>M(n));j(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&&j(g,_+1)}cn(o)}return!0},ownKeys(e){L(o);var t=Reflect.ownKeys(e).filter(e=>{var t=r.get(e);return t===void 0||t.v!==ke});for(var[n,i]of r)i.v!==ke&&!(n in e)&&t.push(n);return t},setPrototypeOf(){Te()}})}function un(e){try{if(typeof e==`object`&&e&&se in e)return e[se]}catch{}return e}function dn(e,t){return Object.is(un(e),un(t))}var fn,pn,mn,hn;function gn(){if(fn===void 0){fn=window,pn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;mn=a(t,`firstChild`).get,hn=a(t,`nextSibling`).get,u(e)&&(e[de]=void 0,e[ue]=null,e[fe]=void 0,e.__e=void 0),u(n)&&(n[pe]=void 0)}}function _n(e=``){return document.createTextNode(e)}function vn(e){return mn.call(e)}function yn(e){return hn.call(e)}function N(e,t){if(!Le)return vn(e);var n=vn(ze);if(n===null)n=ze.appendChild(_n());else if(t&&n.nodeType!==3){var r=_n();return n?.before(r),Be(r),r}return t&&Cn(n),Be(n),n}function P(e,t=!1){if(!Le){var n=vn(e);return n instanceof Comment&&n.data===``?yn(n):n}if(t){if(ze?.nodeType!==3){var r=_n();return ze?.before(r),Be(r),r}Cn(ze)}return ze}function F(e,t=1,n=!1){let r=Le?ze:e;for(var i;t--;)i=r,r=yn(r);if(!Le)return r;if(n){if(r?.nodeType!==3){var a=_n();return r===null?i?.after(a):r.before(a),Be(a),a}Cn(r)}return Be(r),r}function bn(e){e.textContent=``}function xn(){return!1}function Sn(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 Cn(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 wn(e){rr===null&&(er===null&&xe(e),be()),Qn&&ye(e)}function Tn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function En(e,t){var n=rr;n!==null&&n.f&8192&&(e|=x);var r={ctx:Je,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};Pt?.register_created_effect(r);var i=r;if(e&4)Bt===null?Wt.ensure().schedule(r):Bt.push(r);else if(t!==null){try{xr(r)}catch(e){throw Hn(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|=T))}if(i!==null&&(i.parent=n,n!==null&&Tn(i,n),er!==null&&er.f&2&&!(e&64))){var a=er;(a.effects??=[]).push(i)}return r}function Dn(){return er!==null&&!tr}function On(e){let t=En(8,null);return it(t,v),t.teardown=e,t}function kn(e){wn(`$effect`);var t=rr.f;if(!er&&t&32&&Je!==null&&!Je.i){var n=Je;(n.e??=[]).push(e)}else return An(e)}function An(e){return En(4|te,e)}function jn(e){Wt.ensure();let t=En(64|ee,e);return()=>{Hn(t)}}function Mn(e){Wt.ensure();let t=En(64|ee,e);return(e={})=>new Promise(n=>{e.outro?Gn(t,()=>{Hn(t),n(void 0)}):(Hn(t),n(void 0))})}function Nn(e){return En(4,e)}function Pn(e){return En(ae|ee,e)}function Fn(e,t=0){return En(8|t,e)}function I(e,t=[],n=[],r=[]){bt(r,t,n,t=>{En(8,()=>{e(...t.map(L))})})}function In(e,t=0){return En(16|t,e)}function Ln(e,t=0){return En(_|t,e)}function Rn(e){return En(32|ee,e)}function zn(e){var t=e.teardown;if(t!==null){let e=Qn,n=er;$n(!0),nr(null);try{t.call(null)}finally{$n(e),nr(n)}}}function Bn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){let e=n.ac;e!==null&&mt(()=>{e.abort(he)});var r=n.next;n.f&64?n.parent=null:Hn(n,t),n=r}}function Vn(e){for(var t=e.first;t!==null;){var n=t.next;t.f&32||Hn(t),t=n}}function Hn(e,t=!0){var n=!1;(t||e.f&262144)&&e.nodes!==null&&e.nodes.end!==null&&(Un(e.nodes.start,e.nodes.end),n=!0),e.f|=w,Bn(e,t&&!n),br(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(let e of r)e.stop();zn(e),e.f^=w,e.f|=S;var i=e.parent;i!==null&&i.first!==null&&Wn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function Un(e,t){for(;e!==null;){var n=e===t?null:yn(e);e.remove(),e=n}}function Wn(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 Gn(e,t,n=!0){var r=[];Kn(e,r,!0);var i=()=>{n&&Hn(e),t&&t()},a=r.length;if(a>0){var o=()=>--a||i();for(var s of r)s.out(o)}else i()}function Kn(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;Kn(i,t,o?n:!1)}i=a}}}function qn(e){Jn(e,!0)}function Jn(e,t){if(e.f&8192){e.f^=x,e.f&1024||(it(e,y),Wt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,i=(n.f&65536)!=0||(n.f&32)!=0;Jn(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 Yn(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var i=n===r?null:yn(n);t.append(n),n=i}}var Xn=null,Zn=!1,Qn=!1;function $n(e){Qn=e}var er=null,tr=!1;function nr(e){er=e}var rr=null;function ir(e){rr=e}var ar=null;function or(e){er!==null&&(ar??=new Set).add(e)}var sr=null,cr=0,lr=null;function ur(e){lr=e}var dr=1,fr=0,pr=fr;function mr(e){pr=e}function hr(){return++dr}function gr(e){var t=e.f;if(t&2048)return!0;if(t&2&&(e.f&=~re),t&4096){for(var n=e.deps,r=n.length,i=0;ie.wv)return!0}t&512&&It===null&&it(e,v)}return!1}function _r(e,t,n=!0){var r=e.reactions;if(r!==null&&!(ar!==null&&ar.has(e)))for(var i=0;i{e.ac.abort(he)}),e.ac=null);try{e.f|=ie;var u=e.fn,d=u();e.f|=C;var f=e.deps,p=Pt?.is_fork;if(sr!==null){var m;if(p||br(e,cr),f!==null&&cr>0)for(f.length=cr+sr.length,m=0;m{s.ac.abort(he),s.ac=null,it(s,y)}),jt(s),br(s,0)}}function br(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`?$e(()=>{t.addEventListener(e,i,r)}):t.addEventListener(e,i,r),i}function Br(e,t,n,r,i){var a={capture:r,passive:i},o=zr(e,t,n,a);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&On(()=>{t.removeEventListener(e,o,a)})}function R(e,t,n){(t[Ir]??={})[e]=n}function Vr(e){for(var t=0;t{throw e});throw p}}finally{e[Ir]=t,delete e.currentTarget,nr(d),ir(f)}}}var Wr=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy(`svelte-trusted-html`,{createHTML:e=>e});function Gr(e){return Wr?.createHTML(e)??e}function Kr(e){var t=Sn(`template`);return t.innerHTML=Gr(e.replaceAll(``,``)),t.content}function qr(e,t){var n=rr;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function z(e,t){var n=(t&1)!=0,r=(t&2)!=0,i,a=!e.startsWith(``);return()=>{if(Le)return qr(ze,null),ze;i===void 0&&(i=Kr(a?e:``+e),n||(i=vn(i)));var t=r||pn?document.importNode(i,!0):i.cloneNode(!0);if(n){var o=vn(t),s=t.lastChild;qr(o,s)}else qr(t,t);return t}}function Jr(e,t,n=`svg`){var r=!e.startsWith(``),i=(t&1)!=0,a=`<${n}>${r?e:``+e}`,o;return()=>{if(Le)return qr(ze,null),ze;if(!o){var e=vn(Kr(a));if(i)for(o=document.createDocumentFragment();vn(e);)o.appendChild(vn(e));else o=vn(e)}var t=o.cloneNode(!0);if(i){var n=vn(t),r=t.lastChild;qr(n,r)}else qr(t,t);return t}}function Yr(e,t){return Jr(e,t,`svg`)}function Xr(e=``){if(!Le){var t=_n(e+``);return qr(t,t),t}var n=ze;return n.nodeType===3?Cn(n):(n.before(n=_n()),Be(n)),qr(n,n),n}function Zr(){if(Le)return qr(ze,null),ze;var e=document.createDocumentFragment(),t=document.createComment(``),n=_n();return e.append(t,n),qr(t,n),e}function B(e,t){if(Le){var n=rr;(!(n.f&32768)||n.nodes.end===null)&&(n.nodes.end=ze),Ve();return}e!==null&&e.before(t)}var Qr=!0;function $r(e){Qr=e}function V(e,t){var n=t==null?``:typeof t==`object`?`${t}`:t;n!==(e[pe]??=e.nodeValue)&&(e[pe]=n,e.nodeValue=`${n}`)}function ei(e,t){return ni(e,t)}var ti=new Map;function ni(e,{target:t,anchor:n,props:i={},events:a,context:o,intro:s=!0,transformError:c}){gn();var l=void 0,u=Mn(()=>{var u=n??t.appendChild(_n());vt(u,{pending:()=>{}},t=>{D({});var n=Je;if(o&&(n.c=o),a&&(i.$$events=a),Le&&qr(t,null),Qr=s,l=e(t,i)||{},Qr=!0,Le&&(rr.nodes.end=ze,ze===null||ze.nodeType!==8||ze.data!==`]`))throw Pe(),Oe;O()},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=ti.get(n),i=r.get(e);--i==0?(n.removeEventListener(e,Ur),r.delete(e),r.size===0&&ti.delete(n)):r.set(e,i)}Rr.delete(f),u!==n&&u.parentNode?.removeChild(u)}});return ri.set(l,u),l}var ri=new WeakMap,ii=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)qn(n),this.#r.delete(t);else{var r=this.#n.get(t);r&&(qn(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&&(Hn(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();Yn(r,t),t.append(_n()),this.#n.set(e,{effect:r,fragment:t})}else Hn(r);this.#r.delete(e),this.#t.delete(e)};this.#i||!n?(this.#r.add(e),Gn(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)||(Hn(n.effect),this.#n.delete(e))};ensure(e,t){var n=Pt,r=xn();if(t&&!this.#t.has(e)&&!this.#n.has(e))if(r){var i=document.createDocumentFragment(),a=_n();i.append(a),this.#n.set(e,{effect:Rn(()=>t(a)),fragment:i})}else this.#t.set(e,Rn(()=>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 Le&&(this.anchor=ze),this.#a(n)}};function H(e,t,n=!1){var r;Le&&(r=ze,Ve());var i=new ii(e),a=n?T:0;function o(e,t){if(Le){var n=We(r);if(e!==parseInt(n.substring(1))){var a=Ue();Be(a),i.anchor=a,Re(!1),i.ensure(e,t),Re(!0);return}}i.ensure(e,t)}In(()=>{var e=!1;t((t,n=0)=>{e=!0,o(n,t)}),e||o(-1,null)},a)}function ai(e,t){return t}function oi(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;si(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;bn(d),d.append(u),e.items.clear()}si(e,t,!l)}else o={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(o)}function si(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,ui(v,p,c,n,a),d!==null&&(p.length===0?d.f&33554432?(d.f^=ne,fi(d,null,c)):qn(d):Gn(d,()=>{d=null})))}function _(e){v.pending.delete(e)}var v={effect:In(()=>{p=L(f);var e=p.length;let t=!1;Le&&We(c)===`[!`!=(e===0)&&(c=Ue(),Be(c),Re(!1),t=!0);for(var r=new Set,u=Pt,v=xn(),y=0;ys(c)):(d=Rn(()=>s(ci??=_n())),d.f|=ne)),e>r.size&&ve(``,``,``),Le&&e>0&&Be(Ue()),!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&&Re(!0),L(f)}),flags:n,items:l,pending:m,outrogroups:null,fallback:d};h=!1,Le&&(c=ze)}function li(e){for(;e!==null&&!(e.f&32);)e=e.next;return e}function ui(e,t,n,i,a){var o=(i&8)!=0,s=t.length,c=e.items,l=li(e.effect.first),u,d=null,f,p=[],m=[],h,g,_,v;if(o)for(v=0;v0){var ee=i&4&&s===0?n:null;if(o){for(v=0;v{if(f!==void 0)for(_ of f)_.nodes?.a?.apply()})}function di(e,t,n,r,i,a,o,s){var c=o&1?o&16?rn(n):an(n,!1,!1):null,l=o&2?rn(i):null;return{v:c,i:l,e:Rn(()=>(a(t,c??n,l??i,s),()=>{e.delete(r)}))}}function fi(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=yn(r);if(a.before(r),r===i)return;r=o}}function pi(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}function mi(e,t,n=!1,r=!1,i=!1,a=!1){var o=e,s=``;if(n){var c=e;Le&&(o=Be(vn(c)))}I(()=>{var e=rr;if(s===(s=t()??``)){Le&&Ve();return}if(n&&!Le){e.nodes=null,c.innerHTML=s,s!==``&&qr(vn(c),c.lastChild);return}if(e.nodes!==null&&(Un(e.nodes.start,e.nodes.end),e.nodes=null),s!==``){if(Le){for(var a=ze.data,l=Ve(),u=l;l!==null&&(l.nodeType!==8||l.data!==``);)u=l,l=yn(l);if(l===null)throw Pe(),Oe;qr(ze,u),o=Be(l);return}var d=Sn(r?`svg`:i?`math`:`template`,r?je:i?Me:void 0);d.innerHTML=s;var f=r||i?d:d.content;if(qr(vn(f),f.lastChild),r||i)for(;vn(f);)o.before(vn(f));else o.before(f)}})}function hi(e,t,...n){var r=new ii(e);In(()=>{let e=t()??null;r.ensure(e,e&&(t=>e(t,...n)))},T)}function gi(e,t,n){var r;Le&&(r=ze,Ve());var i=new ii(e);In(()=>{var e=t()??null;if(Le&&We(r)===`[`!=(e!==null)){var a=Ue();Be(a),i.anchor=a,Re(!1),i.ensure(e,e&&(t=>n(t,e))),Re(!0);return}i.ensure(e,e&&(t=>n(t,e)))},T)}var _i=()=>performance.now(),vi={tick:e=>requestAnimationFrame(e),now:()=>_i(),tasks:new Set};function yi(){let e=vi.now();vi.tasks.forEach(t=>{t.c(e)||(vi.tasks.delete(t),t.f())}),vi.tasks.size!==0&&vi.tick(yi)}function bi(e){let t;return vi.tasks.size===0&&vi.tick(yi),{promise:new Promise(n=>{vi.tasks.add(t={c:e,f:n})}),abort(){vi.tasks.delete(t)}}}function xi(e,t){mt(()=>{e.dispatchEvent(new CustomEvent(t))})}function Si(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 Ci(e){let t={},n=e.split(`;`);for(let e of n){let[n,r]=e.split(`:`);if(!n||r===void 0)break;let i=Si(n.trim());t[i]=r.trim()}return t}var wi=e=>e,Ti=null;function Ei(e){Ti=e}function Di(e,t,n){var r=(Ti??rr).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=ki(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 Oi(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 mt(()=>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=ki(t,m(),p,1,()=>{xi(t,`introstart`)},()=>{xi(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=ki(t,m(),f,0,()=>{xi(t,`outrostart`)},()=>{xi(t,`outroend`),e?.()})},stop:()=>{f?.abort(),p?.abort()}},g=rr;if((g.nodes.t??=[]).push(h),i&&Qr){var _=s;if(!_){for(var v=g.parent;v&&v.f&65536;)for(;(v=v.parent)&&!(v.f&16););_=!v||(v.f&32768)!=0}_&&Nn(()=>{Tr(()=>h.in())})}}function ki(e,t,n,r,i,a){var o=r===1;if(d(t)){var s,c=!1;return $e(()=>{c||(s=ki(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=wi}=t;var h=[];if(o&&n===void 0&&(p&&p(0,1),u)){var g=Ci(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=Ci(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&&bi(()=>{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 Ai(e,t,n,r,i,a){let o=Le;Le&&Ve();var s=null;Le&&ze.nodeType===1&&(s=ze,Ve());var c=Le?ze:e,l=rr,u=new ii(c,!1);In(()=>{let e=t()||null;var a=i?i():n||e===`svg`?je:void 0;if(e===null){u.ensure(null,null),$r(!0);return}return u.ensure(e,t=>{if(e){if(s=Le?s:Sn(e,a),qr(s,s),r){var n=null;Le&&Fr(e)&&s.append(n=document.createComment(``));var i=Le?vn(s):s.appendChild(_n());Le&&(i===null?Re(!1):Be(i)),Ei(l),r(s,i),n?.remove(),Ei(null)}rr.nodes.end=s,t.before(s)}Le&&Be(t)}),$r(!0),()=>{e&&$r(!1)}},T),On(()=>{$r(!0)}),o&&(Re(!0),Be(c))}function ji(e,t){var n=void 0,r;Ln(()=>{n!==(n=t())&&(r&&=(Hn(r),null),n&&(r=Rn(()=>{Nn(()=>n(e))})))})}function Mi(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||Fi.includes(r[o-1]))&&(s===r.length||Fi.includes(r[s]))?r=(o===0?``:r.substring(0,o))+r.substring(s+1):o=s}}return r===``?null:r}function Li(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 Ri(e){return e[0]!==`-`||e[1]!==`-`?e.toLowerCase():e}function zi(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(Ri)),i&&c.push(...Object.keys(i).map(Ri));var l=0,u=-1;let t=e.length;for(var d=0;d{Hi(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`value`]}),On(()=>{t.disconnect()})}function Wi(e,t,n=t){var r=new WeakSet,i=!0;ht(e,`change`,t=>{var i=t?`[selected]`:`:checked`,a;if(e.multiple)a=[].map.call(e.querySelectorAll(i),Gi);else{var o=e.querySelector(i)??e.querySelector(`option:not([disabled])`);a=o&&Gi(o)}n(a),e.__value=a,Pt!==null&&r.add(Pt)}),Nn(()=>{var a=t();if(e===document.activeElement){var o=Pt;if(r.has(o))return}if(Hi(e,a,i),i&&a===void 0){var s=e.querySelector(`:checked`);s!==null&&(a=Gi(s),n(a))}e.__value=a,i=!1}),Ui(e)}function Gi(e){return`__value`in e?e.__value:e.value}var Ki=Symbol(`class`),qi=Symbol(`style`),Ji=Symbol(`is custom element`),Yi=Symbol(`is html`),Xi=ge?`link`:`LINK`,Zi=ge?`input`:`INPUT`,Qi=ge?`option`:`OPTION`,$i=ge?`select`:`SELECT`,ea=ge?`progress`:`PROGRESS`;function ta(e){if(Le){var t=!1,n=()=>{if(!t){if(t=!0,e.hasAttribute(`value`)){var n=e.value;G(e,`value`,null),e.value=n}if(e.hasAttribute(`checked`)){var r=e.checked;G(e,`checked`,null),e.checked=r}}};e[me]=n,$e(n),pt()}}function na(e,t){var n=sa(e);n.value===(n.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==ea)||(e.value=t??``)}function ra(e,t){var n=sa(e);n.checked!==(n.checked=t??void 0)&&(e.checked=t)}function ia(e,t){t?e.hasAttribute(`selected`)||e.setAttribute(`selected`,``):e.removeAttribute(`selected`)}function G(e,t,n,r){var i=sa(e);Le&&(i[t]=e.getAttribute(t),t===`src`||t===`srcset`||t===`href`&&e.nodeName===Xi)||i[t]!==(i[t]=n)&&(t===`loading`&&(e[le]=n),n==null?e.removeAttribute(t):typeof n!=`string`&&la(e).includes(t)?e[t]=n:e.setAttribute(t,n))}function aa(e,t,n,r,i=!1,a=!1){if(Le&&i&&e.nodeName===Zi){var o=e;(o.type===`checkbox`?`defaultChecked`:`defaultValue`)in n||ta(o)}var s=sa(e),c=s[Ji],l=!s[Yi];let u=Le&&c;u&&Re(!1);var d=t||{},f=e.nodeName===Qi;for(var p in t)p in n||(n[p]=null);n.class?n.class=Pi(n.class):(r||n[Ki])&&(n.class=null),n[qi]&&(n.style??=null);var m=la(e);if(e.nodeName===Zi&&`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,G(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`){W(e,e.namespaceURI===`http://www.w3.org/1999/xhtml`,o,r,t?.[Ki],n[Ki]),d[i]=o,d[Ki]=n[Ki];continue}if(i===`style`){Vi(e,o,t?.[qi],n[qi]),d[i]=o,d[qi]=n[qi];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=Or(r);if(Er(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)R(r,e,o),Vr([r]);else if(o!=null){function a(e){d[i].call(this,e)}d[n]=zr(r,e,a,t)}}else if(i===`style`)G(e,i,o);else if(i===`autofocus`)ut(e,!!o);else if(!c&&(i===`__value`||i===`value`&&o!=null))e.value=e.__value=o;else if(i===`selected`&&f)ia(e,o);else{var y=i;l||(y=jr(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]=ke)):typeof o!=`function`&&G(e,y,o,a)}}}return u&&Re(!0),d}function oa(e,t,n=[],r=[],i=[],a,o=!1,s=!1){bt(i,n,r,n=>{var r=void 0,i={},c=e.nodeName===$i,l=!1;if(Ln(()=>{var u=t(...n.map(L)),d=aa(e,r,u,a,o,s);l&&c&&`value`in u&&Hi(e,u.value);for(let e of Object.getOwnPropertySymbols(i))u[e]||Hn(i[e]);for(let t of Object.getOwnPropertySymbols(u)){var f=u[t];t.description===`@attach`&&(!r||f!==r[t])&&(i[t]&&Hn(i[t]),i[t]=Rn(()=>ji(e,()=>f))),d[t]=f}r=d}),c){var u=e;Nn(()=>{Hi(u,r.value,!0),Ui(u)})}l=!0})}function sa(e){return e[ue]??={[Ji]:e.nodeName.includes(`-`),[Yi]:e.namespaceURI===Ae}}var ca=new Map;function la(e){var t=e.getAttribute(`is`)||e.nodeName,n=ca.get(t);if(n)return n;ca.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 ua(e,t,n=t){var r=new WeakSet;ht(e,`input`,async i=>{var a=i?e.defaultValue:e.value;if(a=fa(e)?pa(a):a,n(a),Pt!==null&&r.add(Pt),await Sr(),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))}}}),(Le&&e.defaultValue!==e.value||Tr(t)==null&&e.value)&&(n(fa(e)?pa(e.value):e.value),Pt!==null&&r.add(Pt)),Fn(()=>{var n=t();if(e===document.activeElement){var i=Pt;if(r.has(i))return}fa(e)&&n===pa(e.value)||e.type===`date`&&!n&&!e.value||n!==e.value&&(e.value=n??``)})}function da(e,t,n=t){ht(e,`change`,t=>{n(t?e.defaultChecked:e.checked)}),(Le&&e.defaultChecked!==e.checked||Tr(t)==null)&&n(e.checked),Fn(()=>{e.checked=!!t()})}function fa(e){var t=e.type;return t===`number`||t===`range`}function pa(e){return e===``?null:+e}function ma(e,t){return e===t||e?.[se]===t}function ha(e={},t,n,r){var i=Je.r,a=rr;return Nn(()=>{var o,s;return Fn(()=>{o=s,s=r?.()||[],Tr(()=>{ma(n(...s),e)||(t(e,...s),o&&ma(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&&ma(n(...s),e)&&t(null,...s)},c=r.teardown;r.teardown=()=>{o(),c?.()}}}),e}var ga={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 _a(e,t,n){return new Proxy({props:e,exclude:t},ga)}function K(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??=wt(r),L(u)):(l&&(l=!1,c=s?Tr(r):r),c);let f;if(o){var p=se in e||ce in e;f=a(e,t)?.set??(p&&t in e?n=>e[t]=n:void 0)}var m,h=!1;o?[m,h]=lt(()=>e[t]):m=e[t],m===void 0&&r!==void 0&&(m=d(),f&&(i&&Ce(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?wt:Dt)(()=>(v=!1,g()));o&&L(y);var b=rr;return(function(e,t){if(arguments.length>0){let n=t?L(y):i&&o?M(e):e;return j(y,n),v=!0,c!==void 0&&(c=n),e}return Qn&&v||b.f&16384?y.v:L(y)})}typeof window<`u`&&((window.__svelte??={}).v??=new Set).add(`5`);var va=new Set([`$$slots`,`$$events`,`$$legacy`,`icon`,`class`]),ya=Yr(``);function q(e,t){let n=K(t,`icon`,19,()=>[]),r=K(t,`class`,3,``),i=_a(t,va);var a=ya();oa(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=Zr();U(P(r),17,n,ai,(t,n)=>{var r=k(()=>g(L(n),3));let i=()=>L(r)[0],a=()=>L(r)[1],o=()=>L(r)[2];var s=Zr();Ai(P(s),i,!0,(t,n)=>{oa(t,()=>({xmlns:`http://www.w3.org/2000/svg`,...a()}));var r=Zr(),i=P(r),s=t=>{e(t,o)},c=k(()=>Array.isArray(o()));H(i,e=>{L(c)&&e(s)}),B(n,r)}),B(t,s)}),B(t,r)};e(N(a),n),E(a)}B(e,a)}var ba=Yr(``);function xa(e){B(e,ba())}function Sa(){try{return typeof localStorage>`u`?null:localStorage}catch{return null}}function Ca(e,t=null){let n=Sa();if(!n)return t;try{return n.getItem(e)??t}catch{return t}}function wa(e,t){let n=Sa();if(n)try{n.setItem(e,String(t))}catch{}}function Ta(e){let t=Number(e);return Number.isFinite(t)?Math.min(240,Math.max(60,Math.round(t))):240}function Ea(e,t,n){return Ta(Number(e)+Number(n)-Number(t))}var Da=new class{#e=A(`system`);get theme(){return L(this.#e)}set theme(e){j(this.#e,e,!0)}#t=A(0);get tick(){return L(this.#t)}set tick(e){j(this.#t,e,!0)}init(){this.theme=Ca(`gomodel_theme`,`system`),this.apply(),window.matchMedia(`(prefers-color-scheme: dark)`).addEventListener(`change`,()=>{this.theme===`system`&&this.tick++})}set(e){this.theme=e,wa(`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=A(M(240));get width(){return L(this.#e)}set width(e){j(this.#e,e,!0)}get collapsed(){return this.width===60}init(){let e=Ca(`gomodel_sidebar_width`),t=Ca(`gomodel_sidebar_collapsed`)===`true`;this.setWidth(e??(t?60:240))}toggle(){this.setWidth(this.collapsed?240:60,!0)}setWidth(e,t=!1){this.width=Ta(e),typeof document<`u`&&document.documentElement.style.setProperty(`--sidebar-width`,`${this.width}px`),t&&(wa(`gomodel_sidebar_width`,this.width),wa(`gomodel_sidebar_collapsed`,this.collapsed))}},ka=new class{#e=A(M([]));get stack(){return L(this.#e)}set stack(e){j(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 5v14`}],[`path`,{d:`m19 12-7 7-7-7`}]],Ma=[[`path`,{d:`m12 19-7-7 7-7`}],[`path`,{d:`M19 12H5`}]],Na=[[`path`,{d:`M5 12h14`}],[`path`,{d:`m12 5 7 7-7 7`}]],Pa=[[`path`,{d:`m5 12 7-7 7 7`}],[`path`,{d:`M12 19V5`}]],Fa=[[`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`}]],Ia=[[`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`}]],La=[[`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`}]],Ra=[[`path`,{d:`M8 2v4`}],[`path`,{d:`M16 2v4`}],[`rect`,{width:`18`,height:`18`,x:`3`,y:`4`,rx:`2`}],[`path`,{d:`M3 10h18`}]],za=[[`path`,{d:`M13 17V9`}],[`path`,{d:`M18 17V5`}],[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M8 17v-3`}]],Ba=[[`path`,{d:`M3 3v16a2 2 0 0 0 2 2h16`}],[`path`,{d:`M18 17V9`}],[`path`,{d:`M13 17V5`}],[`path`,{d:`M8 17v-3`}]],Va=[[`path`,{d:`M20 6 9 17l-5-5`}]],Ha=[[`path`,{d:`m6 9 6 6 6-6`}]],Ua=[[`path`,{d:`m15 18-6-6 6-6`}]],Wa=[[`path`,{d:`m9 18 6-6-6-6`}]],Ga=[[`path`,{d:`M21.801 10A10 10 0 1 1 17 3.335`}],[`path`,{d:`m9 11 3 3L22 4`}]],Ka=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`m9 12 2 2 4-4`}]],qa=[[`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`}]],Ja=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 6v6l4 2`}]],Ya=[[`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`}]],Xa=[[`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`}]],Za=[[`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`}]],Qa=[[`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`}]],$a=[[`path`,{d:`m12 14 4-4`}],[`path`,{d:`M3.34 19a10 10 0 1 1 17.32 0`}]],eo=[[`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`}]],to=[[`circle`,{cx:`12`,cy:`12`,r:`10`}],[`path`,{d:`M12 16v-4`}],[`path`,{d:`M12 8h.01`}]],no=[[`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`}]],ro=[[`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`}]],io=[[`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`}]],ao=[[`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`}]],oo=[[`path`,{d:`m16 17 5-5-5-5`}],[`path`,{d:`M21 12H9`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`}]],so=[[`path`,{d:`M15 3h6v6`}],[`path`,{d:`m21 3-7 7`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M9 21H3v-6`}]],co=[[`path`,{d:`m14 10 7-7`}],[`path`,{d:`M20 10h-6V4`}],[`path`,{d:`m3 21 7-7`}],[`path`,{d:`M4 14h6v6`}]],lo=[[`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`}]],uo=[[`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`}]],fo=[[`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`}]],po=[[`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`}]],mo=[[`path`,{d:`M5 12h14`}],[`path`,{d:`M12 5v14`}]],ho=[[`path`,{d:`M12 2v10`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`}]],go=[[`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`}]],_o=[[`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`}]],vo=[[`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`}]],yo=[[`path`,{d:`m21 21-4.34-4.34`}],[`circle`,{cx:`11`,cy:`11`,r:`8`}]],bo=[[`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`}]],xo=[[`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`}]],So=[[`path`,{d:`M14 17H5`}],[`path`,{d:`M19 7h-9`}],[`circle`,{cx:`17`,cy:`17`,r:`3`}],[`circle`,{cx:`7`,cy:`7`,r:`3`}]],Co=[[`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`}]],wo=[[`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`}]],To=[[`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`}]],Eo=[[`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`}]],Do=[[`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`}]],Oo=[[`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`}]],ko=[[`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`}]],Ao=[[`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`}]],jo=[[`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`}]],Mo=[[`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`}]],No=[[`circle`,{cx:`12`,cy:`8`,r:`5`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`}]],Po=[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`}],[`circle`,{cx:`12`,cy:`7`,r:`4`}]],Fo=[[`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`}]],Io=[[`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`}]],Lo=[[`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`}]],Ro=[[`path`,{d:`M18 6 6 18`}],[`path`,{d:`m6 6 12 12`}]],zo=z(``),Bo=z(`
        `,1);function Vo(e,t){D(t,!0);let n=K(t,`compact`,3,!1),r=[{value:`light`,icon:Oo,label:`Light theme`},{value:`system`,icon:lo,label:`System theme`},{value:`dark`,icon:uo,label:`Dark theme`}],i=k(()=>r.find(e=>e.value===Da.theme)||r[1]),a=k(()=>`Change theme (currently `+L(i).label+`)`);var o=Bo(),s=P(o);let c;U(s,21,()=>r,e=>e.value,(e,t)=>{var n=zo();let r;q(N(n),{get icon(){return L(t).icon},class:`theme-icon`}),E(n),I(()=>{r=W(n,1,`theme-btn svelte-1keql7b`,null,r,{active:Da.theme===L(t).value}),G(n,`aria-pressed`,Da.theme===L(t).value),G(n,`title`,L(t).label),G(n,`aria-label`,L(t).label)}),R(`click`,n,()=>Da.set(L(t).value)),B(e,n)}),E(s);var l=F(s,2);let u;q(N(l),{get icon(){return L(i).icon},class:`theme-icon`}),E(l),I(()=>{c=W(s,1,`theme-toggle svelte-1keql7b`,null,c,{"is-compact":n()}),u=W(l,1,`theme-toggle-mobile svelte-1keql7b`,null,u,{"is-compact":n()}),G(l,`title`,L(a)),G(l,`aria-label`,L(a))}),R(`click`,l,()=>Da.toggle()),B(e,o),O()}Vr([`click`]);function Ho(){return typeof window>`u`?`/`:window.GOMODEL_BASE_PATH||`/`}function Uo(e){let t=Ho();return!e||e.charAt(0)!==`/`||e.indexOf(`//`)===0||t===`/`||e===t||e.indexOf(t+`/`)===0?e:t+e}function Wo(e){let t=Ho();return t===`/`||!e?e:e===t?`/`:e.indexOf(t+`/`)===0?e.slice(t.length)||`/`:e}function Go(){return typeof window>`u`?``:window.GOMODEL_VERSION||``}function Ko(){return typeof window>`u`?!1:window.GOMODEL_DEMO_MODE===!0}var qo=[`overview`,`usage`,`budgets`,`rate-limits`,`models`,`workflows`,`audit-logs`,`guardrails`,`mcp-servers`,`providers-config`,`auth-keys`,`settings`];function Jo(e){return e.startsWith(`/admin/static/`)?`/`+e.slice(14).replace(/^\/+/,``):e}function Yo(e){let t=Jo(Wo(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=qo.includes(n)?n:`overview`,{page:n,sub:r})}var Xo=new class{#e=A(`overview`);get page(){return L(this.#e)}set page(e){j(this.#e,e,!0)}#t=A(null);get sub(){return L(this.#t)}set sub(e){j(this.#t,e,!0)}init(){let{page:e,sub:t}=Yo(window.location.pathname);this.page=e,this.sub=t,window.addEventListener(`popstate`,()=>{let{page:e,sub:t}=Yo(window.location.pathname);this.page=e,this.sub=t})}navigate(e,t=null){let n=t?`/`+t:``;history.pushState(null,``,Uo(`/admin/dashboard/`+e+n)),this.page=e,this.sub=t}},Zo=`X-GoModel-Auth-Login`,Qo=`X-GoModel-Auth-Logout`,$o=`X-GoModel-Auth-User`;function es(e){let t=String(e||``).trim();return!t.startsWith(`/`)||t.startsWith(`//`)||t.includes(`\\`)?``:t}function ts(e,t=globalThis.location){let n=es(e),r=es(t?.pathname);if(!n||!r)return n;let i=String(t?.search||``),a=r+(i.startsWith(`?`)?i:``),o=n.indexOf(`#`),s=o<0?n:n.slice(0,o),c=o<0?``:n.slice(o);return`${s}${s.includes(`?`)?`&`:`?`}return_to=${encodeURIComponent(a)}${c}`}function ns(e){let t=e?.headers;if(!t||typeof t.has!=`function`)return null;let n={};return t.has(Zo)&&(n.loginURL=es(t.get(Zo))),t.has(Qo)&&(n.logoutURL=es(t.get(Qo))),t.has($o)&&(n.user=String(t.get($o)||``).trim().slice(0,256)),n}var rs=`gomodel_api_key`;function is(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 J=new class{#e=A(``);get apiKey(){return L(this.#e)}set apiKey(e){j(this.#e,e,!0)}#t=A(!1);get needsAuth(){return L(this.#t)}set needsAuth(e){j(this.#t,e,!0)}#n=A(!1);get authError(){return L(this.#n)}set authError(e){j(this.#n,e,!0)}#r=A(``);get authErrorMessage(){return L(this.#r)}set authErrorMessage(e){j(this.#r,e,!0)}#i=A(!1);get dialogOpen(){return L(this.#i)}set dialogOpen(e){j(this.#i,e,!0)}#a=A(``);get externalLoginURL(){return L(this.#a)}set externalLoginURL(e){j(this.#a,e,!0)}#o=A(``);get externalLogoutURL(){return L(this.#o)}set externalLogoutURL(e){j(this.#o,e,!0)}#s=A(``);get externalUser(){return L(this.#s)}set externalUser(e){j(this.#s,e,!0)}#c=A(0);get generation(){return L(this.#c)}set generation(e){j(this.#c,e,!0)}#l=A(0);get refreshTick(){return L(this.#l)}set refreshTick(e){j(this.#l,e,!0)}init(){try{this.apiKey=is(localStorage.getItem(rs)||``)}catch{this.apiKey=``}}hasApiKey(){return is(this.apiKey)!==``}save(){this.apiKey=is(this.apiKey);try{localStorage.setItem(rs,this.apiKey)}catch{}}selectExternalAuthentication(){this.apiKey=``;try{localStorage.removeItem(rs)}catch{}this.generation++,this.authError=!1,this.authErrorMessage=``,this.needsAuth=!0}openDialog(){this.dialogOpen=!0}closeDialog(){this.dialogOpen=!1}submit(){let e=is(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++}observeResponse(e){let t=ns(e);t&&(Object.hasOwn(t,`loginURL`)&&(this.externalLoginURL=t.loginURL),Object.hasOwn(t,`logoutURL`)&&(this.externalLogoutURL=t.logoutURL),Object.hasOwn(t,`user`)&&(this.externalUser=t.user))}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=hs(`en-CA`,{timeZone:gs(t)?t:ds,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 os(e)}dateToDateKey(e){return ss(e)}addDaysToDateKey(e,t){return cs(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=gs(e)?e:ds;try{let e=hs(`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=[]}[ds,this.detectedTimezone,this.override].forEach(e=>{e&&t.indexOf(e)===-1&&gs(e)&&t.push(e)}),t=t.filter(e=>gs(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=Sa();if(e)if(this.override&&gs(this.override))try{e.setItem(fs,this.override)}catch{}else{try{e.removeItem(fs)}catch{}this.override=``}this.optionsLoaded=!1,this.ensureOptions()}clearOverride(){let e=Sa();if(e)try{e.removeItem(fs)}catch{}this.override=``}calendarTimeZoneText(){let e=this.override?`manual override`:`auto-detected`;return`Activity grouped by `+this.effectiveTimeZoneLabel()+` (`+e+`)`}};function bs(e,t){let n=e&&typeof e==`object`&&e.error&&e.error.message;return(typeof n==`string`?n.trim():``)||t}function xs(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 Ss(){let e={"Content-Type":`application/json`},t=is(J.apiKey);return t&&(e.Authorization=`Bearer `+t),e[`X-GoModel-Timezone`]=ys.effectiveTimezone(),e}function Cs(e,t={}){return fetch(Uo(e),{...t,headers:{...Ss(),...t.headers||{}}})}async function ws(e,t,{label:n=e,parse:r=!0}={}){let i=J.generation,a=await Cs(e,t),o=ie.trim()).filter(Boolean);return e.length>0?e:ks}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 Ts(`/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 Os)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)}}},js=[{page:`overview`,label:`Overview`,icon:ro},{page:`providers-config`,label:`Providers`,icon:bo},{page:`models`,label:`Models`,icon:Fa},{page:`audit-logs`,label:`Audit Logs`,icon:eo},{page:`usage`,label:`Usage`,icon:Ba},{page:`budgets`,label:`Budgets`,icon:Fo,visible:()=>As.budgetsVisible()},{page:`rate-limits`,label:`Rate Limits`,icon:$a,visible:()=>As.rateLimitsVisible()},{page:`auth-keys`,label:`API Keys`,icon:no},{page:`workflows`,label:`Workflows`,icon:Lo},{page:`guardrails`,label:`Guardrails (experimental)`,icon:wo,visible:()=>As.guardrailsVisible()},{page:`mcp-servers`,label:`MCP Servers`,icon:po,visible:()=>As.mcpVisible()},{page:`settings`,label:`Settings`,icon:Co}],Ms=z(` `),Ns=z(`
        `),Ps=z(``),Fs=z(`
        `),Is=z(` `,1);function Ls(e,t){D(t,!0);let n=k(()=>js.filter(e=>!e.visible||e.visible())),r=A(null),i=0,a=0,o=!1;function s(e){e.button===0&&(e.preventDefault(),j(r,e.pointerId,!0),i=e.clientX,a=Oa.width,o=!1,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`sidebar-resizing`))}function c(e){e.pointerId===L(r)&&(!o&&Math.abs(e.clientX-i)<=4||(o=!0,Oa.setWidth(Ea(a,i,e.clientX))))}function l(e){L(r)===null||e.pointerId!==void 0&&e.pointerId!==L(r)||(j(r,null),document.body.classList.remove(`sidebar-resizing`),Oa.setWidth(Oa.width,!0))}function u(){if(o){o=!1;return}Oa.toggle()}function d(e){let t;if(e.key===`ArrowLeft`)t=Oa.width-12;else if(e.key===`ArrowRight`)t=Oa.width+12;else if(e.key===`Home`)t=60;else if(e.key===`End`)t=240;else if(e.key===`Enter`||e.key===` `){e.preventDefault(),Oa.toggle();return}else return;e.preventDefault(),Oa.setWidth(t,!0)}var f=Is(),p=P(f);let m;var h=N(p),g=N(h);xa(N(g),{}),E(g),He(4),E(h);var _=F(h,2);U(_,21,()=>L(n),e=>e.page,(e,t)=>{var n=Ms();let r;var i=N(n);q(i,{get icon(){return L(t).icon},class:`nav-icon`});var a=F(i,2),o=N(a,!0);E(a),E(n),I(e=>{G(n,`href`,e),r=W(n,1,`nav-item svelte-1nwtzae`,null,r,{active:Xo.page===L(t).page}),G(n,`title`,L(t).label),V(o,L(t).label)},[()=>Uo(`/admin/dashboard/`+L(t).page)]),R(`click`,n,e=>{e.preventDefault(),Xo.navigate(L(t).page)}),B(e,n)}),E(_);var v=F(_,2),y=N(v);Vo(y,{get compact(){return Oa.collapsed}});var b=F(y,2),x=e=>{var t=Ps(),n=N(t),r=e=>{var t=Ns(),n=N(t);q(n,{get icon(){return No},class:`api-key-open-icon`});var r=F(n,2),i=N(r,!0);E(r),E(t),I(()=>{G(t,`title`,J.externalUser),V(i,J.externalUser)}),B(e,t)};H(n,e=>{J.externalUser&&e(r)});var i=F(n,2);q(N(i),{get icon(){return oo},class:`api-key-open-icon`}),He(2),E(i),E(t),I(e=>G(i,`href`,e),[()=>Uo(J.externalLogoutURL)]),B(e,t)};H(b,e=>{J.externalLogoutURL&&e(x)});var S=F(b,2),C=e=>{var t=Fs(),n=N(t),r=N(n);q(r,{get icon(){return ao},class:`api-key-open-icon`});var i=F(r,2),a=N(i,!0);E(i),E(n),E(t),I(()=>{G(n,`aria-label`,J.needsAuth?`Enter API key`:`Change API key`),V(a,J.needsAuth?`Enter API key`:`Change API key`)}),R(`click`,n,()=>J.openDialog()),B(e,t)},w=k(()=>J.needsAuth||J.hasApiKey());H(S,e=>{L(w)&&e(C)}),E(v),E(p);var T=F(p,2);I(()=>{m=W(p,1,`sidebar svelte-1nwtzae`,null,m,{"sidebar-collapsed":Oa.collapsed,"sidebar-resizing":L(r)!==null}),G(T,`aria-valuemin`,60),G(T,`aria-valuemax`,240),G(T,`aria-valuenow`,Oa.width)}),R(`pointerdown`,T,s),R(`pointermove`,T,c),R(`pointerup`,T,l),Br(`pointercancel`,T,l),Br(`lostpointercapture`,T,l),R(`keydown`,T,d),R(`click`,T,u),B(e,f),O()}Vr([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`]);var Rs=z(``);function zs(e,t){D(t,!0);let n=K(t,`label`,3,`Close`),r=K(t,`class`,3,``),i=K(t,`iconClass`,3,`table-icon-svg`),a=K(t,`disabled`,3,!1),o=K(t,`el`,15,null);var s=Rs();q(N(s),{get icon(){return Ro},get class(){return i()}}),E(s),ha(s,e=>o(e),()=>o()),I(()=>{W(s,1,Pi([`dialog-close-btn`,r()]),`svelte-11l1bb5`),G(s,`aria-label`,n()),s.disabled=a()}),R(`click`,s,function(...e){t.onclick?.apply(this,e)}),B(e,s),O()}Vr([`click`]);function Bs(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 Vs(e=`[data-modal-autofocus]`){return t=>{let n=t.querySelector(e);n&&typeof n.focus==`function`&&n.focus()}}var Hs=z(`
        `,1);function Us(e,t){D(t,!0);let n=K(t,`open`,3,!1),r=K(t,`variant`,3,`editor`),i=K(t,`closeOnBackdrop`,3,!0),a=k(()=>r()===`auth`?`auth-dialog-backdrop`:`editor-modal-backdrop`),o=k(()=>r()===`auth`?`auth-dialog-shell`:`editor-modal-shell`);kn(()=>{if(!n())return;let e=Tr(()=>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=Zr(),l=P(c),u=e=>{var n=Hs(),r=P(n),i=F(r,2);hi(N(i),()=>t.children??f),E(i),ji(i,Vs),I(()=>{W(r,1,Pi(L(a)),`svelte-17e0w4c`),W(i,1,Pi(L(o)),`svelte-17e0w4c`)}),R(`click`,i,s),B(e,n)};H(l,e=>{n()&&e(u)}),B(e,c),O()}Vr([`click`]);var Ws=z(`
        or use an API key
        `,1),Gs=z(``),Ks=z(``);function qs(e,t){D(t,!0),Us(e,{get open(){return J.dialogOpen},variant:`auth`,onclose:()=>J.closeDialog(),children:(e,t)=>{var n=Ks(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a),E(i),zs(F(i,2),{label:`Close authentication dialog`,onclick:()=>J.closeDialog(),class:`auth-dialog-close`,iconClass:``}),E(r);var s=F(r,2),c=N(s),l=e=>{var t=Ws(),n=P(t);q(N(n),{get icon(){return no}}),He(2),E(n),He(2),I(e=>G(n,`href`,e),[()=>ts(Uo(J.externalLoginURL))]),R(`click`,n,()=>J.selectExternalAuthentication()),B(e,t)};H(c,e=>{J.externalLoginURL&&e(l)});var u=F(c,2),d=N(u);q(d,{get icon(){return ao},class:`auth-dialog-input-icon`});var f=F(d,2);ta(f),E(u);var p=F(u,2),m=e=>{var t=Gs(),n=N(t,!0);E(t),I(()=>V(n,J.authErrorMessage||`Enter a valid API key to continue.`)),B(e,t)};H(p,e=>{J.authError&&e(m)});var h=F(p,4),g=N(h),_=N(g);q(_,{get icon(){return Va},class:`auth-dialog-submit-icon`});var v=F(_,2),y=N(v,!0);E(v),E(g),E(h),E(s),E(n),I(()=>{V(o,J.needsAuth?`Dashboard locked`:`Change API key`),V(y,J.needsAuth?`Unlock dashboard`:`Save API key`)}),Br(`submit`,s,e=>{e.preventDefault(),J.submit()}),ua(f,()=>J.apiKey,e=>J.apiKey=e),B(e,n)},$$slots:{default:!0}}),O()}Vr([`click`]);function Js(){return{open:!1,title:``,titleId:`typedConfirmationDialogTitle`,inputId:`typed-confirmation-input`,message:``,requiredText:``,value:``,confirmLabel:`Confirm`,icon:Mo,dialogClass:``,loading:!1,onConfirm:null,onClose:null}}var Ys=new class{#e=A(M(Js()));get state(){return L(this.#e)}set state(e){j(this.#e,e,!0)}#t=A(``);get error(){return L(this.#t)}set error(e){j(this.#t,e,!0)}open(e){this.error=``,this.state={...Js(),open:!0,...e||{}}}close(){let e=this.state;typeof e.onClose==`function`&&e.onClose(),this.state=Js(),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}}}},Xs=z(`

        `),Zs=z(``),Qs=z(`

        `);function $s(e,t){D(t,!0);let n=k(()=>Ys.state);Us(e,{get open(){return L(n).open},variant:`auth`,onclose:()=>Ys.close(),children:(e,t)=>{var r=Qs(),i=N(r),a=N(i),o=N(a,!0);E(a),zs(F(a,2),{label:`Close confirmation dialog`,onclick:()=>Ys.close(),class:`auth-dialog-close`,iconClass:``}),E(i);var s=F(i,2),c=N(s),l=e=>{var t=Xs(),r=N(t,!0);E(t),I(()=>V(r,L(n).message)),B(e,t)};H(c,e=>{L(n).message&&e(l)});var u=F(c,2),d=N(u),f=N(d,!0);E(d);var p=F(d,2);ta(p),E(u);var m=F(u,2),h=e=>{var t=Zs(),n=N(t,!0);E(t),I(()=>V(n,Ys.error)),B(e,t)};H(m,e=>{Ys.error&&e(h)});var g=F(m,2),_=N(g),v=F(_,2),y=N(v);q(y,{get icon(){return L(n).icon},class:`form-action-icon`});var b=F(y,2),x=N(b,!0);E(b),E(v),E(g),E(s),E(r),I((e,t)=>{W(r,1,`auth-dialog ${L(n).dialogClass??``}`),G(r,`aria-labelledby`,L(n).titleId),G(a,`id`,L(n).titleId),V(o,L(n).title),G(d,`for`,L(n).inputId),V(f,e),G(p,`id`,L(n).inputId),v.disabled=t,V(x,L(n).confirmLabel)},[()=>Ys.inputLabel(),()=>L(n).loading||!Ys.ready()]),Br(`submit`,s,e=>{e.preventDefault(),Ys.submit()}),ua(p,()=>Ys.state.value,e=>Ys.state.value=e),R(`click`,_,()=>Ys.close()),B(e,r)},$$slots:{default:!0}}),O()}Vr([`click`]);var ec=e=>e;function tc(e){let t=e-1;return t*t*t+1}function nc(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function rc(e,{delay:t=0,duration:n=400,easing:r=ec}={}){let i=+getComputedStyle(e).opacity;return{delay:t,duration:n,easing:r,css:e=>`opacity: ${e*i}`}}function ic(e,{delay:t=0,duration:n=400,easing:r=tc,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]=nc(i),[p,m]=nc(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 ac(e,{delay:t=0,duration:n=400,easing:r=tc,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 oc(e){return--e*e*(2.70158*e+1.70158)+1}function sc(e){let t=e-1;return t*t*t+1}var cc=5e3,lc=8e3,Y=new class{#e=A(M([]));get toasts(){return L(this.#e)}set toasts(e){j(this.#e,e,!0)}#t=0;#n=new Map;success(e){this.#r(`success`,e,cc)}error(e){this.#r(`error`,e,lc)}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))}},uc=z(`
        `),dc=z(`
        `);function fc(e,t){D(t,!0);var n=dc();U(n,21,()=>Y.toasts,e=>e.id,(e,t)=>{var n=uc();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2);E(n),I(()=>{r=W(n,1,`flash-toast svelte-1i257xg`,null,r,{"flash-toast-success":L(t).kind===`success`,"flash-toast-error":L(t).kind===`error`}),G(n,`role`,L(t).kind===`error`?`alert`:`status`),G(n,`aria-live`,L(t).kind===`error`?`assertive`:`polite`),V(a,L(t).text)}),R(`click`,o,()=>Y.dismiss(L(t).id)),Oi(1,n,()=>ic,()=>({y:-24,duration:360,easing:oc})),Oi(2,n,()=>rc,()=>({duration:150})),B(e,n)}),E(n),B(e,n),O()}Vr([`click`]);var pc=z(``);function mc(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{B(e,pc())},a=k(()=>Ko());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}function hc(e){return String(e||``).split(`,`).map(e=>e.trim()).filter(e=>e)}function gc(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 _c(e){return e==null||e===void 0?`-`:e.toLocaleString()}function vc(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 yc(e){return e==null||e===void 0?`—`:`$`+e.toFixed(2)}function bc(e){return e==null||e===void 0?`—`:e<.01?`$`+e.toFixed(6):`$`+e.toFixed(4)}function xc(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)?_c(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 wc(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 Tc(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 Ec(e){return String(e&&e.provider||``).trim()}function Dc(e){return String(e&&e.provider_name||``).trim()||Ec(e)}function Oc(e,t){let n=String(t||``).trim();if(!n)return`-`;let r=Dc(e);return!r||n===r||n.startsWith(r+`/`)?n:r+`/`+n}function kc(e){return Oc(e,e&&e.model)}function Ac(e){return Oc(e,e&&e.resolved_model)}function jc(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=Ac(e);if(n&&n!==`-`&&n!==t)return t+` ⮕ `+n}return t}var Mc=`gomodel_date_range`,Nc=1;function Pc(e){return/^[1-9]\d*$/.test(String(e??``))}var Fc=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function Ic({selectedPreset:e,startKey:t,endKey:n,followsToday:r}){return e&&Pc(e)?{v:Nc,mode:`preset`,days:String(e)}:e?null:ls(t)&&ls(n)?{v:Nc,mode:`custom`,start:t,end:n,follow:r===!0}:null}function Lc(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`?Pc(t.days)?{mode:`preset`,days:String(t.days)}:null:t.mode===`custom`&&ls(t.start)&&ls(t.end)&&t.start<=t.end?{mode:`custom`,start:t.start,end:t.end,follow:t.follow===!0}:null}function Rc(e,t,n){let r=us(e,t);return r<1||!ls(n)?{start:e,end:t}:{start:cs(n,-(r-1)),end:n}}function zc(e,t){if(e===t)return`Today`;let[n,r,i]=e.split(`-`);return Fc[Number(r)-1]+` `+Number(i)+`, `+n}function Bc({selectedPreset:e,startKey:t,endKey:n,followsToday:r,todayKey:i}){if(e)return`Last `+e+` days`;if(!ls(t)||!ls(n))return``;let a=us(t,n);return r||n===i?a===1?`Today`:`Last `+a+` days`:a===1?`1 day`:a+` days`}function Vc({selectedPreset:e,startKey:t,endKey:n,todayKey:r}){if(e)return`Last `+e+` days`;let i=e=>zc(e,r);return ls(t)&&ls(n)?t===n?i(t):i(t)+` – `+i(n):ls(t)?i(t)+` – ...`:`Last 30 days`}var Hc=6e4,Uc=new class{#e=A(M(`30`));get days(){return L(this.#e)}set days(e){j(this.#e,e,!0)}#t=A(M(`30`));get selectedPreset(){return L(this.#t)}set selectedPreset(e){j(this.#t,e,!0)}#n=A(null);get customStartDate(){return L(this.#n)}set customStartDate(e){j(this.#n,e,!0)}#r=A(null);get customEndDate(){return L(this.#r)}set customEndDate(e){j(this.#r,e,!0)}#i=A(!1);get followsToday(){return L(this.#i)}set followsToday(e){j(this.#i,e,!0)}#a=A(`daily`);get interval(){return L(this.#a)}set interval(e){j(this.#a,e,!0)}#o=A(0);get syncTick(){return L(this.#o)}set syncTick(e){j(this.#o,e,!0)}init(){this.restore(),this.syncToToday(),typeof setInterval==`function`&&setInterval(()=>this.syncToToday(),Hc)}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))}},Gc=z(``);function Kc(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=Gc(),n=F(N(t),2);E(t),R(`click`,n,()=>J.openDialog()),B(e,t)};H(r,e=>{J.authError&&e(i)}),B(e,n),O()}Vr([`click`]);function qc(){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 Jc(){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 Yc=new class{#e=A(M(qc()));get summary(){return L(this.#e)}set summary(e){j(this.#e,e,!0)}#t=A(M([]));get daily(){return L(this.#t)}set daily(e){j(this.#t,e,!0)}#n=A(M(Jc()));get cacheOverview(){return L(this.#n)}set cacheOverview(e){j(this.#n,e,!0)}#r=A(!1);get loading(){return L(this.#r)}set loading(e){j(this.#r,e,!0)}#i=null;#a=null;cacheAnalyticsEnabled(){return As.cacheVisible()}async fetchUsage(){this.#i&&this.#i.abort();let e=new AbortController;this.#i=e,this.loading=!0;try{let t=Uc.queryStr()+`&interval=`+Uc.interval,[n,r]=await Promise.all([Ts(`/admin/usage/summary?`+t,{label:`usage summary`,signal:e.signal}),Ts(`/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=qc(),this.daily=[],this.cacheOverview=Jc();return}this.summary=n.data||qc(),this.daily=Array.isArray(r.data)?r.data:[]}catch(e){if(Ds(e))return;console.error(`Failed to fetch usage:`,e),this.summary=qc(),this.daily=[]}finally{this.#i===e&&(this.#i=null,this.loading=!1)}}async fetchCacheOverview(e=``){if(await As.ensureLoaded(),!this.cacheAnalyticsEnabled()){this.cacheOverview=Jc();return}this.#a&&this.#a.abort();let t=new AbortController;this.#a=t;try{let n=await Ts(`/admin/cache/overview?`+(Uc.queryStr()+`&interval=`+Uc.interval+e),{label:`cache overview`,signal:t.signal});if(n.stale||t.signal.aborted)return;if(!n.ok){this.cacheOverview=Jc();return}let r=n.data&&typeof n.data==`object`?n.data:Jc();r.summary||=Jc().summary,Array.isArray(r.daily)||(r.daily=[]),this.cacheOverview=r}catch(e){if(Ds(e))return;console.error(`Failed to fetch cache overview:`,e),this.cacheOverview=Jc()}finally{this.#a===t&&(this.#a=null)}}},Xc=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`];function Zc(e,t){let n=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return Xc[n.getUTCMonth()]+` `+n.getUTCFullYear()}function Qc(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 $c(e,t,n){let r=new Date(Date.UTC(e.getUTCFullYear(),e.getUTCMonth()+t,1));return n&&r.getTime()>n.getTime()?e:r}function el(e,t){return e.getUTCFullYear()===t.getUTCFullYear()&&e.getUTCMonth()===t.getUTCMonth()}var tl=z(``),nl=z(``),rl=z(``),il=z(`
        MoTuWeThFrSaSu
        `);function al(e,t){D(t,!0);let n=K(t,`offset`,3,0),r=k(()=>Qc(t.calendarMonth,n(),e=>ys.dateToDateKey(e))),i=k(()=>el(t.calendarMonth,ys.todayDate())),a=e=>ys.dateToDateKey(e.date),o=e=>a(e)>ys.currentDateKey(),s=e=>e.current&&a(e)===ys.currentDateKey();function c(e,t){let n=t===`start`?Uc.rangeStart():Uc.rangeEnd();return e.current&&!!n&&a(e)===ys.dateToDateKey(n)}function l(e){let t=Uc.rangeStart(),n=Uc.rangeEnd();return!e.current||!t||!n?!1:a(e)>=ys.dateToDateKey(t)&&a(e)<=ys.dateToDateKey(n)}var u=il(),d=N(u),f=N(d);let p;var m=F(f,2),h=N(m,!0);E(m);var g=F(m,2),_=e=>{B(e,tl())},v=e=>{var n=nl();I(()=>n.disabled=L(i)),R(`click`,n,function(...e){t.onnext?.apply(this,e)}),B(e,n)};H(g,e=>{n()===-1?e(_):e(v,-1)}),E(d);var y=F(d,4);U(y,21,()=>L(r),e=>e.key,(e,n)=>{var r=rl(),i=N(r,!0);E(r),I((e,t)=>{W(r,1,e,`svelte-g7ga4u`),r.disabled=t,V(i,L(n).day)},[()=>Pi([`dp-day`,{"other-month":!L(n).current,today:s(L(n)),"range-start":c(L(n),`start`),"range-end":c(L(n),`end`),"in-range":l(L(n)),disabled:o(L(n))}]),()=>o(L(n))||!L(n).current]),R(`click`,r,()=>t.onselect?.(L(n))),B(e,r)}),E(y),E(u),I(e=>{p=W(f,1,`dp-nav-btn svelte-g7ga4u`,null,p,{"dp-nav-prev-mobile":n()!==-1}),V(h,e)},[()=>Zc(t.calendarMonth,n())]),R(`click`,f,function(...e){t.onprev?.apply(this,e)}),B(e,u),O()}Vr([`click`]);var ol=z(``),sl=z(`
        `),cl=Yr(``),ll=Yr(``),ul=z(`
        `),dl=z(`
        `);function fl(e,t){D(t,!0);let n=[`3`,`7`,`14`,`30`,`90`],r=A(!1),i=A(`start`),a=A(M(new Date)),o=A(M({show:!1,x:0,y:0}));function s(){j(r,!L(r)),L(r)&&(Uc.syncToToday(),j(a,ys.startOfMonthDate(Uc.customEndDate||ys.todayDate()),!0),j(i,`start`))}function c(){j(r,!1),j(o,{show:!1,x:0,y:0},!0)}let l=Uc.syncTick;kn(()=>{let e=Uc.syncTick;e!==l&&(l=e,t.onchange?.())});function u(e){Uc.selectPreset(e),j(i,`start`),t.onchange?.(),c()}let d=()=>j(a,$c(L(a),-1),!0),f=()=>j(a,$c(L(a),1,ys.startOfMonthDate(ys.todayDate())),!0);function p(e){let n=new Date(e.date);if(L(i)===`start`){Uc.selectStart(n),j(i,`end`),t.onchange?.();return}Uc.selectEnd(n),j(i,`start`),t.onchange?.(),c()}var m=dl(),h=N(m),g=F(N(h),2),_=N(g,!0);E(g);var v=F(g,2);let y;E(h);var b=F(h,2),x=e=>{var t=sl(),r=N(t);U(r,20,()=>n,e=>e,(e,t)=>{var n=ol();let r;var i=N(n);E(n),I(()=>{r=W(n,1,`preset-btn svelte-ax7ma4`,null,r,{active:Uc.selectedPreset===t}),V(i,`Last ${t??``} days`)}),R(`click`,n,()=>u(t)),B(e,n)}),E(r);var i=F(r,2);U(i,20,()=>[-1,0],e=>e,(e,t)=>{al(e,{get calendarMonth(){return L(a)},get offset(){return t},onprev:d,onnext:f,onselect:p})}),E(i),E(t),R(`mousemove`,i,e=>j(o,{show:!0,x:e.clientX,y:e.clientY},!0)),Br(`mouseleave`,i,()=>j(o,{show:!1,x:0,y:0},!0)),B(e,t)};H(b,e=>{L(r)&&e(x)});var S=F(b,2),C=e=>{var t=ul(),n=N(t),r=e=>{B(e,cl())},a=e=>{B(e,ll())};H(n,e=>{L(i)===`start`?e(r):e(a,-1)});var s=F(n,2),c=N(s,!0);E(s),E(t),I(()=>{Vi(t,`left:${L(o).x??``}px;top:${L(o).y??``}px`),V(c,L(i)===`end`?`Select end date`:`Select start date`)}),B(e,t)};H(S,e=>{L(o).show&&e(C)}),E(m),ji(m,()=>L(r)?Bs(c):void 0),I((e,t)=>{G(h,`title`,e),V(_,t),y=W(v,0,`date-picker-chevron svelte-ax7ma4`,null,y,{open:L(r)})},[()=>Uc.dateRangeSpanLabel(),()=>Uc.dateRangeLabel()]),R(`click`,h,s),B(e,m),O()}Vr([`click`,`mousemove`]);function pl(e){return e+.5|0}var ml=(e,t,n)=>Math.max(Math.min(e,n),t);function hl(e){return ml(pl(e*2.55),0,255)}function gl(e){return ml(pl(e*255),0,255)}function _l(e){return ml(pl(e/2.55)/100,0,1)}function vl(e){return ml(pl(e*100),0,100)}var yl={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},bl=[...`0123456789ABCDEF`],xl=e=>bl[e&15],Sl=e=>bl[(e&240)>>4]+bl[e&15],Cl=e=>(e&240)>>4==(e&15),wl=e=>Cl(e.r)&&Cl(e.g)&&Cl(e.b)&&Cl(e.a);function Tl(e){var t=e.length,n;return e[0]===`#`&&(t===4||t===5?n={r:255&yl[e[1]]*17,g:255&yl[e[2]]*17,b:255&yl[e[3]]*17,a:t===5?yl[e[4]]*17:255}:(t===7||t===9)&&(n={r:yl[e[1]]<<4|yl[e[2]],g:yl[e[3]]<<4|yl[e[4]],b:yl[e[5]]<<4|yl[e[6]],a:t===9?yl[e[7]]<<4|yl[e[8]]:255})),n}var El=(e,t)=>e<255?t(e):``;function Dl(e){var t=wl(e)?xl:Sl;return e?`#`+t(e.r)+t(e.g)+t(e.b)+El(e.a,t):void 0}var Ol=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function kl(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 Al(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 jl(e,t,n){let r=kl(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 Ml(e,t,n,r,i){return e===i?(t-n)/r+(t.5?l/(2-i-a):l/(i+a),s=Ml(t,n,r,l,i),s=s*60+.5),[s|0,c||0,o]}function Pl(e,t,n,r){return(Array.isArray(t)?e(t[0],t[1],t[2]):e(t,n,r)).map(gl)}function Fl(e,t,n){return Pl(kl,e,t,n)}function Il(e,t,n){return Pl(jl,e,t,n)}function Ll(e,t,n){return Pl(Al,e,t,n)}function Rl(e){return(e%360+360)%360}function zl(e){let t=Ol.exec(e),n=255,r;if(!t)return;t[5]!==r&&(n=t[6]?hl(+t[5]):gl(+t[5]));let i=Rl(+t[2]),a=t[3]/100,o=t[4]/100;return r=t[1]===`hwb`?Il(i,a,o):t[1]===`hsv`?Ll(i,a,o):Fl(i,a,o),{r:r[0],g:r[1],b:r[2],a:n}}function Bl(e,t){var n=Nl(e);n[0]=Rl(n[0]+t),n=Fl(n),e.r=n[0],e.g=n[1],e.b=n[2]}function Vl(e){if(!e)return;let t=Nl(e),n=t[0],r=vl(t[1]),i=vl(t[2]);return e.a<255?`hsla(${n}, ${r}%, ${i}%, ${_l(e.a)})`:`hsl(${n}, ${r}%, ${i}%)`}var Hl={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`},Ul={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 Wl(){let e={},t=Object.keys(Ul),n=Object.keys(Hl),r,i,a,o,s;for(r=0;r>16&255,a>>8&255,a&255]}return e}var Gl;function Kl(e){Gl||(Gl=Wl(),Gl.transparent=[0,0,0,0]);let t=Gl[e.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var ql=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function Jl(e){let t=ql.exec(e),n=255,r,i,a;if(t){if(t[7]!==r){let e=+t[7];n=t[8]?hl(e):ml(e*255,0,255)}return r=+t[1],i=+t[3],a=+t[5],r=255&(t[2]?hl(r):ml(r,0,255)),i=255&(t[4]?hl(i):ml(i,0,255)),a=255&(t[6]?hl(a):ml(a,0,255)),{r,g:i,b:a,a:n}}}function Yl(e){return e&&(e.a<255?`rgba(${e.r}, ${e.g}, ${e.b}, ${_l(e.a)})`:`rgb(${e.r}, ${e.g}, ${e.b})`)}var Xl=e=>e<=.0031308?e*12.92:e**(1/2.4)*1.055-.055,Zl=e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4;function Ql(e,t,n){let r=Zl(_l(e.r)),i=Zl(_l(e.g)),a=Zl(_l(e.b));return{r:gl(Xl(r+n*(Zl(_l(t.r))-r))),g:gl(Xl(i+n*(Zl(_l(t.g))-i))),b:gl(Xl(a+n*(Zl(_l(t.b))-a))),a:e.a+n*(t.a-e.a)}}function $l(e,t,n){if(e){let r=Nl(e);r[t]=Math.max(0,Math.min(r[t]+r[t]*n,t===0?360:1)),r=Fl(r),e.r=r[0],e.g=r[1],e.b=r[2]}}function eu(e,t){return e&&Object.assign(t||{},e)}function tu(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=gl(e[3]))):(t=eu(e,{r:0,g:0,b:0,a:1}),t.a=gl(t.a)),t}function nu(e){return e.charAt(0)===`r`?Jl(e):zl(e)}var ru=class e{constructor(t){if(t instanceof e)return t;let n=typeof t,r;n===`object`?r=tu(t):n===`string`&&(r=Tl(t)||Kl(t)||nu(t)),this._rgb=r,this._valid=!!r}get valid(){return this._valid}get rgb(){var e=eu(this._rgb);return e&&(e.a=_l(e.a)),e}set rgb(e){this._rgb=tu(e)}rgbString(){return this._valid?Yl(this._rgb):void 0}hexString(){return this._valid?Dl(this._rgb):void 0}hslString(){return this._valid?Vl(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=Ql(this._rgb,e._rgb,t)),this}clone(){return new e(this.rgb)}alpha(e){return this._rgb.a=gl(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=pl(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 $l(this._rgb,2,e),this}darken(e){return $l(this._rgb,2,-e),this}saturate(e){return $l(this._rgb,1,e),this}desaturate(e){return $l(this._rgb,1,-e),this}rotate(e){return Bl(this._rgb,e),this}};function iu(){}var au=(()=>{let e=0;return()=>e++})();function ou(e){return e==null}function su(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 cu(e){return e!==null&&Object.prototype.toString.call(e)===`[object Object]`}function lu(e){return(typeof e==`number`||e instanceof Number)&&isFinite(+e)}function uu(e,t){return lu(e)?e:t}function du(e,t){return e===void 0?t:e}var fu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100:+e/t,pu=(e,t)=>typeof e==`string`&&e.endsWith(`%`)?parseFloat(e)/100*t:+e;function mu(e,t,n){if(e&&typeof e.call==`function`)return e.apply(n,t)}function hu(e,t,n,r){let i,a,o;if(su(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 wu(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 Tu(e){let t=wu(e);return e=>{for(let n of t){if(n===``)break;e&&=e[n]}return e}}function Eu(e,t){return(Cu[t]||(Cu[t]=Tu(t)))(e)}function Du(e){return e.charAt(0).toUpperCase()+e.slice(1)}var Ou=e=>e!==void 0,ku=e=>typeof e==`function`,Au=(e,t)=>{if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0};function ju(e){return e.type===`mouseup`||e.type===`click`||e.type===`contextmenu`}var Mu=Math.PI,Nu=2*Mu,Pu=Nu+Mu,Fu=1/0,Iu=Mu/180,Lu=Mu/2,Ru=Mu/4,zu=Mu*2/3,Bu=Math.log10,Vu=Math.sign;function Hu(e,t,n){return Math.abs(e-t)e-t).pop(),t}function Gu(e){return typeof e==`symbol`||typeof e==`object`&&!!e&&!(Symbol.toPrimitive in e||`toString`in e||`valueOf`in e)}function Ku(e){return!Gu(e)&&!isNaN(parseFloat(e))&&isFinite(e)}function qu(e,t){let n=Math.round(e);return n-t<=e&&n+t>=e}function Ju(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 od(e,t,n){n||=(n=>e[n]1;)a=i+r>>1,n(a)?i=a:r=a;return{lo:i,hi:r}}var sd=(e,t,n,r)=>od(e,n,r?r=>{let i=e[r][t];return ie[r][t]od(e,n,r=>e[r][t]>=n);function ld(e,t,n){let r=0,i=e.length;for(;rr&&e[i-1]>n;)i--;return r>0||i{let n=`_onData`+Du(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 fd(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)&&(ud.forEach(t=>{delete e[t]}),delete e._chartjs)}function pd(e){let t=new Set(e);return t.size===e.length?e:Array.from(t)}var md=function(){return typeof window>`u`?function(e){return e()}:window.requestAnimationFrame}();function hd(e,t){let n=[],r=!1;return function(...i){n=i,r||(r=!0,md.call(window,()=>{r=!1,e.apply(t,n)}))}}function gd(e,t){let n;return function(...r){return t?(clearTimeout(n),n=setTimeout(e,t,r)):e.apply(this,r),t}}var _d=e=>e===`start`?`left`:e===`end`?`right`:`center`,vd=(e,t,n)=>e===`start`?t:e===`end`?n:(t+n)/2,yd=(e,t,n,r)=>e===(r?`left`:`right`)?n:e===`center`?(t+n)/2:t;function bd(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(sd(c,u,d).lo,n?r:sd(t,u,o.getPixelForValue(d)).lo),l){let e=c.slice(0,i+1).reverse().findIndex(e=>!ou(e[s.axis]));i-=Math.max(0,e)}i=rd(i,0,r-1)}if(m){let e=Math.max(sd(c,o.axis,f,!0).hi+1,n?0:sd(t,u,o.getPixelForValue(f),!0).hi+1);if(l){let t=c.slice(e-1).findIndex(e=>!ou(e[s.axis]));e+=Math.max(0,t)}a=rd(e,i,r)-i}else a=r-i}return{start:i,count:a}}function xd(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)*Nu/n)),wd=(e,t,n)=>2**(-10*e)*Math.sin((e-t)*Nu/n)+1,Td={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*Lu)+1,easeOutSine:e=>Math.sin(e*Lu),easeInOutSine:e=>-.5*(Math.cos(Mu*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:wd(e,.075,.3),easeInOutElastic(e){let t=.1125,n=.45;return Sd(e)?e:e<.5?.5*Cd(e*2,t,n):.5+.5*wd(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-Td.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?Td.easeInBounce(e*2)*.5:Td.easeOutBounce(e*2-1)*.5+.5};function Ed(e){if(e&&typeof e==`object`){let t=e.toString();return t===`[object CanvasPattern]`||t===`[object CanvasGradient]`}return!1}function Dd(e){return Ed(e)?e:new ru(e)}function Od(e){return Ed(e)?e:new ru(e).saturate(.5).darken(.1).hexString()}var kd=[`x`,`y`,`borderWidth`,`radius`,`tension`],Ad=[`color`,`borderColor`,`backgroundColor`];function jd(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:Ad},numbers:{type:`number`,properties:kd}}),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 Md(e){e.set(`layout`,{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var Nd=new Map;function Pd(e,t){t||={};let n=e+JSON.stringify(t),r=Nd.get(n);return r||(r=new Intl.NumberFormat(e,t),Nd.set(n,r)),r}function Fd(e,t,n){return Pd(t,n).format(e)}var Id={values(e){return su(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=Ld(e,n)}let o=Bu(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),Fd(e,r,c)},logarithmic(e,t,n){if(e===0)return`0`;let r=n[t].significand||e/10**Math.floor(Bu(e));return[1,2,3,5,10,15].includes(r)||t>.8*n.length?Id.numeric.call(this,e,t,n):``}};function Ld(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 Rd={formatters:Id};function zd(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:Rd.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 Bd=Object.create(null),Vd=Object.create(null);function Hd(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)=>Od(t.backgroundColor),this.hoverBorderColor=(e,t)=>Od(t.borderColor),this.hoverColor=(e,t)=>Od(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 Ud(this,e,t)}get(e){return Hd(this,e)}describe(e,t){return Ud(Vd,e,t)}override(e,t){return Ud(Bd,e,t)}route(e,t,n,r){let i=Hd(this,e),a=Hd(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 cu(e)?Object.assign({},t,e):du(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}},[jd,Md,zd]);function Gd(e){return!e||ou(e.size)||ou(e.family)?null:(e.style?e.style+` `:``)+(e.weight?e.weight+` `:``)+e.size+`px `+e.family}function Kd(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 qd(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 Qd(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,rf(e,a),c=0;c+e||0;function pf(e,t){let n={},r=cu(t),i=r?Object.keys(t):t,a=cu(e)?r?n=>du(e[n],e[t[n]]):t=>e[t]:()=>e;for(let e of i)n[e]=ff(a(e));return n}function mf(e){return pf(e,{top:`y`,right:`x`,bottom:`y`,left:`x`})}function hf(e){return pf(e,[`topLeft`,`topRight`,`bottomLeft`,`bottomRight`])}function gf(e){let t=mf(e);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function _f(e,t){e||={},t||=Wd.font;let n=du(e.size,t.size);typeof n==`string`&&(n=parseInt(n,10));let r=du(e.style,t.style);r&&!(``+r).match(uf)&&(console.warn(`Invalid font style specified: "`+r+`"`),r=void 0);let i={family:du(e.family,t.family),lineHeight:df(du(e.lineHeight,t.lineHeight),n),size:n,style:r,weight:du(e.weight,t.weight),string:``};return i.string=Gd(i),i}function vf(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 bf(e,t){return Object.assign(Object.create(e),t)}function xf(e,t=[``],n,r,i=()=>e[0]){let a=n||e;return r===void 0&&(r=Lf(`_fallback`,e)),new Proxy({[Symbol.toStringTag]:`Object`,_cacheable:!0,_scopes:e,_rootScopes:a,_fallback:r,_getTarget:i,override:n=>xf([n,...e],t,a,r)},{deleteProperty(t,n){return delete t[n],delete t._keys,delete e[0][n],!0},get(n,r){return Ef(n,r,()=>If(r,t,e,n))},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(e._scopes[0],t)},getPrototypeOf(){return Reflect.getPrototypeOf(e[0])},has(e,t){return Rf(e).includes(t)},ownKeys(e){return Rf(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 Ef(e,t,()=>Df(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:ku(n)?n:()=>n,isIndexable:ku(r)?r:()=>r}}var wf=(e,t)=>e?e+Du(t):t,Tf=(e,t)=>cu(t)&&e!==`adapters`&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Ef(e,t,n){if(Object.prototype.hasOwnProperty.call(e,t)||t===`constructor`)return e[t];let r=n();return e[t]=r,r}function Df(e,t,n){let{_proxy:r,_context:i,_subProxy:a,_descriptors:o}=e,s=r[t];return ku(s)&&o.isScriptable(t)&&(s=Of(t,s,e,n)),su(s)&&s.length&&(s=kf(t,s,e,o.isIndexable)),Tf(t,s)&&(s=Sf(s,i,a&&a[t],o)),s}function Of(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),Tf(e,c)&&(c=Nf(i._scopes,i,e,c)),c}function kf(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(cu(t[0])){let n=t,r=i._scopes.filter(e=>e!==n);t=[];for(let c of n){let n=Nf(r,i,e,c);t.push(Sf(n,a,o&&o[e],s))}}return t}function Af(e,t,n){return ku(e)?e(t,n):e}var jf=(e,t)=>e===!0?t:typeof e==`string`?Eu(t,e):void 0;function Mf(e,t,n,r,i){for(let a of t){let t=jf(n,a);if(t){e.add(t);let a=Af(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 Nf(e,t,n,r){let i=t._rootScopes,a=Af(t._fallback,n,r),o=[...e,...i],s=new Set;s.add(r);let c=Pf(s,o,n,a||n,r);return c===null||a!==void 0&&a!==n&&(c=Pf(s,o,a,c,r),c===null)?!1:xf(Array.from(s),[``],i,a,()=>Ff(t,n,r))}function Pf(e,t,n,r,i){for(;n;)n=Mf(e,t,n,r,i);return n}function Ff(e,t,n){let r=e._getTarget();t in r||(r[t]={});let i=r[t];return su(i)&&cu(n)?n:i||{}}function If(e,t,n,r){let i;for(let a of t)if(i=Lf(wf(a,e),n),i!==void 0)return Tf(e,i)?Nf(n,r,e,i):i}function Lf(e,t){for(let n of t){if(!n)continue;let t=n[e];if(t!==void 0)return t}}function Rf(e){let t=e._keys;return t||=e._keys=zf(e._scopes),t}function zf(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 Bf(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 Wf(e,t,n,r){let i=e.skip?t:e,a=t,o=n.skip?t:n,s=$u(a,i),c=$u(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 Gf(e,t,n){let r=e.length,i,a,o,s,c,l=Hf(e,0);for(let u=0;u!e.skip)),t.cubicInterpolationMode===`monotone`)qf(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 tp(e,t){return ep(e).getPropertyValue(t)}var np=[`top`,`right`,`bottom`,`left`];function rp(e,t,n){let r={};n=n?`-`+n:``;for(let i=0;i<4;i++){let a=np[i];r[a]=parseFloat(e[t+`-`+a+n])||0}return r.width=r.left+r.right,r.height=r.top+r.bottom,r}var ip=(e,t,n)=>(e>0||t>0)&&(!n||!n.shadowRoot);function ap(e,t){let n=e.touches,r=n&&n.length?n[0]:e,{offsetX:i,offsetY:a}=r,o=!1,s,c;if(ip(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 op(e,t){if(`native`in e)return e;let{canvas:n,currentDevicePixelRatio:r}=t,i=ep(n),a=i.boxSizing===`border-box`,o=rp(i,`padding`),s=rp(i,`border`,`width`),{x:c,y:l,box:u}=ap(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 sp(e,t,n){let r,i;if(t===void 0||n===void 0){let a=e&&Qf(e);if(!a)t=e.clientWidth,n=e.clientHeight;else{let e=a.getBoundingClientRect(),o=ep(a),s=rp(o,`border`,`width`),c=rp(o,`padding`);t=e.width-c.width-s.width,n=e.height-c.height-s.height,r=$f(o.maxWidth,a,`clientWidth`),i=$f(o.maxHeight,a,`clientHeight`)}}return{width:t,height:n,maxWidth:r||Fu,maxHeight:i||Fu}}var cp=e=>Math.round(e*10)/10;function lp(e,t,n,r){let i=ep(e),a=rp(i,`margin`),o=$f(i.maxWidth,e,`clientWidth`)||Fu,s=$f(i.maxHeight,e,`clientHeight`)||Fu,c=sp(e,t,n),{width:l,height:u}=c;if(i.boxSizing===`content-box`){let e=rp(i,`border`,`width`),t=rp(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=cp(Math.min(l,o,c.maxWidth)),u=cp(Math.min(u,s,c.maxHeight)),l&&!u&&(u=cp(l/2)),(t!==void 0||n!==void 0)&&r&&c.height&&u>c.height&&(u=c.height,l=cp(Math.floor(u*r))),{width:l,height:u}}function up(e,t,n){let r=t||1,i=cp(e.height*r),a=cp(e.width*r);e.height=cp(e.height),e.width=cp(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 dp=function(){let e=!1;try{let t={get passive(){return e=!0,!1}};Zf()&&(window.addEventListener(`test`,null,t),window.removeEventListener(`test`,null,t))}catch{}return e}();function fp(e,t){let n=tp(e,t),r=n&&n.match(/^(\d+)(\.\d+)?px$/);return r?+r[1]:void 0}function pp(e,t,n,r){return{x:e.x+n*(t.x-e.x),y:e.y+n*(t.y-e.y)}}function mp(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 hp(e,t,n,r){let i={x:e.cp2x,y:e.cp2y},a={x:t.cp1x,y:t.cp1y},o=pp(e,i,n),s=pp(i,a,n),c=pp(a,t,n);return pp(pp(o,s,n),pp(s,c,n),n)}var gp=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}}},_p=function(){return{x(e){return e},setWidth(e){},textAlign(e){return e},xPlus(e,t){return e+t},leftForLtr(e,t){return e}}};function vp(e,t,n){return e?gp(t,n):_p()}function yp(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 bp(e,t){t!==void 0&&(delete e.prevTextDirection,e.canvas.style.setProperty(`direction`,t[0],t[1]))}function xp(e){return e===`angle`?{between:nd,compare:ed,normalize:td}:{between:ad,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}=xp(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 Tp(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 Dp(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 Op(e,t){let n=e.points,r=e.options.spanGaps,i=n.length;if(!i)return[];let a=!!e._loop,{start:o,end:s}=Ep(n,i,a,r);return r===!0?kp(e,[{start:o,end:s,loop:a}],n,t):kp(e,Dp(n,o,sr({chart:e,initial:t.initial,numSteps:a,currentStep:Math.min(n-t.start,a)}))}_refresh(){this._request||=(this._running=!0,md.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)}},Lp=`transparent`,Rp={boolean(e,t,n){return n>.5?t:e},color(e,t,n){let r=Dd(e||Lp),i=r.valid&&Dd(t||Lp);return i&&i.valid?i.mix(r,n).hexString():t},number(e,t,n){return e+(t-e)*n}},zp=class{constructor(e,t,n,r){let i=t[n];r=vf([e.to,r,i,e.from]);let a=vf([e.from,i,r]);this._active=!0,this._fn=e.fn||Rp[e.type||typeof a],this._easing=Td[e.easing]||Td.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=vf([e.to,t,r,e.from]),this._from=vf([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(!cu(i))return;let a={};for(let e of t)a[e]=i[e];(su(i.properties)&&i.properties||[r]).forEach(e=>{(e===r||!n.has(e))&&n.set(e,a)})})}_animateOptions(e,t){let n=t.options,r=Hp(e,n);if(!r)return[];let i=this._createAnimations(r,n);return n.$shared&&Vp(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 zp(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 Ip.add(this._chart,n),!0}};function Vp(e,t){let n=[],r=Object.keys(t);for(let t=0;t0||!n&&t<0)return i.index}return null}function em(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=Xp(a,o,r),d=t.length,f;for(let e=0;en[e].axis===t).shift()}function nm(e,t){return bf(e,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:`default`,type:`dataset`})}function rm(e,t,n){return bf(e,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:n,index:t,mode:`default`,type:`data`})}function im(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 am=e=>e===`reset`||e===`none`,om=(e,t)=>t?e:Object.assign({},e),sm=(e,t,n)=>e&&!t.hidden&&t._stacked&&{keys:Kp(n,!0),values:null},cm=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=Yp(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&&im(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=du(n.xAxisID,tm(e,`x`)),a=t.yAxisID=du(n.yAxisID,tm(e,`y`)),o=t.rAxisID=du(n.rAxisID,tm(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&&fd(this._data,this),e._stacked&&im(e)}_dataCheck(){let e=this.getDataset(),t=e.data||=[],n=this._data;if(cu(t)){let e=this._cachedMeta;this._data=Jp(t,e)}else if(n!==t){if(n){fd(n,this);let e=this._cachedMeta;im(e),e._parsed=[]}t&&Object.isExtensible(t)&&dd(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=Yp(t.vScale,t),t.stack!==n.stack&&(r=!0,im(t),t.stack=n.stack),this._resyncElements(e),(r||i!==t._stacked)&&(em(this,t._parsed),t._stacked=Yp(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=su(r[e])?this.parseArrayData(n,r,e,t):cu(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(om(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 Bp(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||am(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){am(r)?Object.assign(e,n):this._resolveAnimations(t,r).update(e,n)}updateSharedOptions(e,t,n){e&&!am(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 um(e){let t=e.iScale,n=lm(t,e.type),r=t._length,i,a,o,s,c=()=>{o===32767||o===-32768||(Ou(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 mm(e,t,n,r){return su(e)?pm(e,t,n,r):t[n.axis]=n.parse(e,r),t}function hm(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):Vu(e)}function vm(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(ou(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[du(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;dnd(e,s,c,!0)?1:Math.max(t,t*n,r,r*n),m=(e,t,r)=>nd(e,s,c,!0)?-1:Math.min(t,t*n,r,r*n),h=p(0,l,d),g=p(Lu,u,f),_=m(Mu,l,d),v=m(Mu+Lu,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 Dm=class extends cm{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(cu(n[e])){let{key:e=`value`}=this._parsing;i=t=>+Eu(n[t],e)}let a,o;for(a=e,o=e+t;a0&&!isNaN(e)?Math.abs(e)/t*Nu:0}getLabelAndValue(e){let t=this._cachedMeta,n=this.chart,r=n.data.labels||[],i=Fd(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=ou(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()}},km=class extends cm{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=Fd(t._parsed[e].r,n.options.locale);return{label:r[e]||``,value:i}}parseObjectData(e,t,n,r){return Bf.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*Mu,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)?Yu(this.resolveDataElementOptions(e,t).angle||n):0}},Am=Object.freeze({__proto__:null,BarController:wm,BubbleController:Tm,DoughnutController:Dm,LineController:Om,PieController:class extends Dm{static id=`pie`;static defaults={cutout:0,rotation:0,circumference:360,radius:`100%`}},PolarAreaController:km,RadarController:class extends cm{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 Bf.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 jm(){throw Error(`This method is not implemented: Check that a complete date adapter is provided.`)}var Mm={_date:class e{static override(t){Object.assign(e.prototype,t)}options;constructor(e){this.options=e||{}}init(){}formats(){return jm()}parse(){return jm()}format(){return jm()}add(){return jm()}diff(){return jm()}startOf(){return jm()}endOf(){return jm()}}};function Nm(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?cd:sd;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=>!ou(e[t.axis]));r.lo-=Math.max(0,a);let o=n.slice(r.hi).findIndex(e=>!ou(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 Pm(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 Vm={evaluateInteractionItems:Pm,modes:{index(e,t,n,r){let i=op(t,e),a=n.axis||`x`,o=n.includeInvisible||!1,s=n.intersect?Im(e,i,a,r,o):zm(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=op(t,e),a=n.axis||`xy`,o=n.includeInvisible||!1,s=n.intersect?Im(e,i,a,r,o):zm(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 Wm(e,t){return e.filter(e=>Hm.indexOf(e.pos)===-1&&e.box.axis===t)}function Gm(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 Km(e){let t=[],n,r,i,a,o,s;for(n=0,r=(e||[]).length;ne.box.fullSize),!0),r=Gm(Um(t,`left`),!0),i=Gm(Um(t,`right`)),a=Gm(Um(t,`top`),!0),o=Gm(Um(t,`bottom`)),s=Wm(t,`x`),c=Wm(t,`y`);return{fullSize:n,leftAndTop:r.concat(a),rightAndBottom:i.concat(c).concat(o).concat(s),chartArea:Um(t,`chartArea`),vertical:r.concat(i).concat(c),horizontal:a.concat(o).concat(s)}}function Xm(e,t,n,r){return Math.max(e[n],t[n])+Math.max(e[r],t[r])}function Zm(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 Qm(e,t,n,r){let{pos:i,box:a}=n,o=e.maxPadding;if(!cu(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&&Zm(o,a.getPadding());let s=Math.max(0,t.outerWidth-Xm(o,e,`left`,`right`)),c=Math.max(0,t.outerHeight-Xm(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 $m(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 eh(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 th(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);Zm(f,gf(r));let p=Object.assign({maxPadding:f,w:a,h:o,x:i.left,y:i.top},i),m=Jm(c.concat(l),d);th(s.fullSize,p,d,m),th(c,p,d,m),th(l,p,d,m)&&th(c,p,d,m),$m(p),rh(s.leftAndTop,p,d,m),p.x+=p.w,p.y+=p.h,rh(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},hu(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})})}},ah=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){}},oh=class extends ah{acquireContext(e){return e&&e.getContext&&e.getContext(`2d`)||null}updateConfig(e){e.options.animation=!1}},sh=`$chartjs`,ch={touchstart:`mousedown`,touchmove:`mousemove`,touchend:`mouseup`,pointerenter:`mouseenter`,pointerdown:`mousedown`,pointermove:`mousemove`,pointerup:`mouseup`,pointerleave:`mouseout`,pointerout:`mouseout`},lh=e=>e===null||e===``;function uh(e,t){let n=e.style,r=e.getAttribute(`height`),i=e.getAttribute(`width`);if(e[sh]={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`,lh(i)){let t=fp(e,`width`);t!==void 0&&(e.width=t)}if(lh(r))if(e.style.height===``)e.height=e.width/(t||2);else{let t=fp(e,`height`);t!==void 0&&(e.height=t)}return e}var dh=dp?{passive:!0}:!1;function fh(e,t,n){e&&e.addEventListener(t,n,dh)}function ph(e,t,n){e&&e.canvas&&e.canvas.removeEventListener(t,n,dh)}function mh(e,t){let n=ch[e.type]||e.type,{x:r,y:i}=op(e,t);return{type:n,chart:t,native:e,x:r===void 0?null:r,y:i===void 0?null:i}}function hh(e,t){for(let n of e)if(n===t||n.contains(t))return!0}function gh(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=hh(n.addedNodes,r),t&&=!hh(n.removedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}function _h(e,t,n){let r=e.canvas,i=new MutationObserver(e=>{let t=!1;for(let n of e)t||=hh(n.removedNodes,r),t&&=!hh(n.addedNodes,r);t&&n()});return i.observe(document,{childList:!0,subtree:!0}),i}var vh=new Map,yh=0;function bh(){let e=window.devicePixelRatio;e!==yh&&(yh=e,vh.forEach((t,n)=>{n.currentDevicePixelRatio!==e&&t()}))}function xh(e,t){vh.size||window.addEventListener(`resize`,bh),vh.set(e,t)}function Sh(e){vh.delete(e),vh.size||window.removeEventListener(`resize`,bh)}function Ch(e,t,n){let r=e.canvas,i=r&&Qf(r);if(!i)return;let a=hd((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),xh(e,a),o}function wh(e,t,n){n&&n.disconnect(),t===`resize`&&Sh(e)}function Th(e,t,n){let r=e.canvas,i=hd(t=>{e.ctx!==null&&n(mh(t,e))},e);return fh(r,t,i),i}var Eh=class extends ah{acquireContext(e,t){let n=e&&e.getContext&&e.getContext(`2d`);return n&&n.canvas===e?(uh(e,t),n):null}releaseContext(e){let t=e.canvas;if(!t[sh])return!1;let n=t[sh].initial;[`height`,`width`].forEach(e=>{let r=n[e];ou(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[sh],!0}addEventListener(e,t,n){this.removeEventListener(e,t);let r=e.$proxies||={};r[t]=({attach:gh,detach:_h,resize:Ch}[t]||Th)(e,t,n)}removeEventListener(e,t){let n=e.$proxies||={},r=n[t];r&&(({attach:wh,detach:wh,resize:wh}[t]||ph)(e,t,r),n[t]=void 0)}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(e,t,n,r){return lp(e,t,n,r)}isAttached(e){let t=e&&Qf(e);return!!(t&&t.isConnected)}};function Dh(e){return!Zf()||typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas?oh:Eh}var Oh=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 Ku(this.x)&&Ku(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 kh(e,t){let n=e.options.ticks,r=Ah(e),i=Math.min(n.maxTicksLimit||r,r),a=n.major.enabled?Mh(t):[],o=a.length,s=a[0],c=a[o-1],l=[];if(o>i)return Nh(t,l,a,o/i),l;let u=jh(a,t,i);if(o>0){let e,n,r=o>1?Math.round((c-s)/(o-1)):null;for(Ph(t,l,u,ou(r)?0:s-r,s),e=0,n=o-1;ei)return t}return Math.max(i,1)}function Mh(e){let t=[],n,r;for(n=0,r=e.length;ne===`left`?`right`:e===`right`?`left`:e,Lh=(e,t,n)=>t===`top`||t===`left`?e[t]+n:e[t]-n,Rh=(e,t)=>Math.min(t||e,e);function zh(e,t){let n=[],r=e.length/t,i=e.length,a=0;for(;ao+s)))return c}function Vh(e,t){hu(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:uu(t,uu(n,t)),max:uu(n,uu(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(){mu(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=yf(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=rd(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-Hh(e.grid)-t.padding-Uh(e.title,this.chart.options.font),c=Math.sqrt(u*u+d*d),a=Xu(Math.min(Math.asin(rd((l.highest.height+6)/o,-1,1)),Math.asin(rd(s/c,-1,1))-Math.asin(rd(d/c,-1,1)))),a=Math.max(r,Math.min(i,a))),this.labelRotation=a}afterCalculateLabelRotation(){mu(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){mu(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=Uh(r,t.options.font);if(o?(e.width=this.maxWidth,e.height=Hh(i)+a):(e.height=this.maxHeight,e.width=Hh(i)+a),n.display&&this.ticks.length){let{first:t,last:r,widest:i,highest:a}=this._getLabelSizes(),s=n.padding*2,c=Yu(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(){mu(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 id(this._alignToPixels?Jd(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=Hh(i),d=[],f=o.setContext(this.getContext()),p=f.display?f.width:0,m=p/2,h=function(e){return Jd(n,e,p)},g,_,v,y,b,x,S,C,w,T,ee,te;if(a===`top`)g=h(this.bottom),x=this.bottom-u,C=g-m,T=h(e.top)+m,te=e.bottom;else if(a===`bottom`)g=h(this.top),T=e.top,te=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,ee=e.right;else if(a===`right`)g=h(this.left),w=e.left,ee=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(cu(a)){let e=Object.keys(a)[0],t=a[e];g=h(this.chart.scales[e].getPixelForValue(t))}T=e.top,te=e.bottom,x=g+m,C=x+u}else if(t===`y`){if(a===`center`)g=h((e.left+e.right)/2);else if(cu(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,ee=e.right}let ne=du(r.ticks.maxTicksLimit,l),re=Math.max(1,Math.ceil(l/ne));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:te,options:{rotation:m,color:n,strokeColor:s,strokeWidth:l,textAlign:d,textBaseline:ne,translation:[b,x],backdrop:f}})}return h}_getXAxisLabelAlignment(){let{position:e,ticks:t}=this.options;if(-Yu(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(`.`);Wd.route(a,i,c,s)})}function Qh(e){return`id`in e&&`defaults`in e}var $h=new class{constructor(){this.controllers=new Yh(cm,`datasets`,!0),this.elements=new Yh(Oh,`elements`),this.plugins=new Yh(Object,`plugins`),this.scales=new Yh(Jh,`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):hu(t,t=>{let r=n||this._getRegistryForType(t);this._exec(e,r,t)})})}_exec(e,t,n){let r=Du(e);mu(n[`before`+r],[],n),t[e](n),mu(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 tg(e){let t={},n=[],r=Object.keys($h.plugins.items);for(let e=0;e1&&cg(e[0].toLowerCase());if(t)return t}throw Error(`Cannot determine type of '${e}' axis. Please provide 'axis' or 'position' option.`)}function dg(e,t,n){if(n[t+`AxisID`]===e)return{axis:t}}function fg(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 dg(e,`x`,n[0])||dg(e,`y`,n[0])}return{}}function pg(e,t){let n=Bd[e.type]||{scales:{}},r=t.scales||{},i=ag(e.type,t),a=Object.create(null);return Object.keys(r).forEach(t=>{let o=r[t];if(!cu(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=ug(t,o,fg(t,e),Wd.scales[o.type]),c=sg(s,i),l=n.scales||{};a[t]=xu(Object.create(null),[{axis:s},o,l[s],l[c]])}),e.data.datasets.forEach(n=>{let i=n.type||e.type,o=n.indexAxis||ag(i,t),s=(Bd[i]||{}).scales||{};Object.keys(s).forEach(e=>{let t=og(e,o),i=n[t+`AxisID`]||t;a[i]=a[i]||Object.create(null),xu(a[i],[{axis:t},r[i],s[e]])})}),Object.keys(a).forEach(e=>{let t=a[e];xu(t,[Wd.scales[t.type],Wd.scale])}),a}function mg(e){let t=e.options||={};t.plugins=du(t.plugins,{}),t.scales=pg(e,t)}function hg(e){return e||={},e.datasets=e.datasets||[],e.labels=e.labels||[],e}function gg(e){return e||={},e.data=hg(e.data),mg(e),e}var _g=new Map,vg=new Set;function yg(e,t){let n=_g.get(e);return n||(n=t(),_g.set(e,n),vg.add(n)),n}var bg=(e,t,n)=>{let r=Eu(t,n);r!==void 0&&e.add(r)},xg=class{constructor(e){this._config=gg(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=hg(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(),mg(e)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(e){return yg(e,()=>[[`datasets.${e}`,``]])}datasetAnimationScopeKeys(e,t){return yg(`${e}.transition.${t}`,()=>[[`datasets.${e}.transitions.${t}`,`transitions.${t}`],[`datasets.${e}`,``]])}datasetElementScopeKeys(e,t){return yg(`${e}-${t}`,()=>[[`datasets.${e}.elements.${t}`,`datasets.${e}`,`elements.${t}`,``]])}pluginScopeKeys(e){let t=e.id,n=this.type;return yg(`${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=>bg(s,e,t))),t.forEach(e=>bg(s,r,e)),t.forEach(e=>bg(s,Bd[i]||{},e)),t.forEach(e=>bg(s,Wd,e)),t.forEach(e=>bg(s,Vd,e))});let c=Array.from(s);return c.length===0&&c.push(Object.create(null)),vg.has(t)&&a.set(t,c),c}chartOptionScopes(){let{options:e,type:t}=this;return[e,Bd[t]||{},Wd.datasets[t]||{},{type:t},Wd,Vd]}resolveNamedOptions(e,t,n,r=[``]){let i={$shared:!0},{resolver:a,subPrefixes:o}=Sg(this._resolverCache,e,r),s=a;if(wg(a,t)){i.$shared=!1,n=ku(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 cu(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:xf(t,n),subPrefixes:n.filter(e=>!e.toLowerCase().includes(`hover`))},r.set(i,a)),a}var Cg=e=>cu(e)&&Object.getOwnPropertyNames(e).some(t=>ku(e[t]));function wg(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&&(ku(o)||Cg(o))||a&&su(o))return!0}return!1}var Tg=`4.5.1`,Eg=[`top`,`bottom`,`left`,`right`,`chartArea`];function Dg(e,t){return e===`top`||e===`bottom`||Eg.indexOf(e)===-1&&t===`x`}function Og(e,t){return function(n,r){return n[e]===r[e]?n[t]-r[t]:n[e]-r[e]}}function kg(e){let t=e.chart,n=t.options.animation;t.notifyPlugins(`afterRender`),mu(n&&n.onComplete,[e],t)}function Ag(e){let t=e.chart,n=t.options.animation;mu(n&&n.onProgress,[e],t)}function jg(e){return Zf()&&typeof e==`string`?e=document.getElementById(e):e&&e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas),e}var Mg={},Ng=e=>{let t=jg(e);return Object.values(Mg).filter(e=>e.canvas===t).pop()};function Pg(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 Fg(e,t,n,r){return!n||e.type===`mouseout`?null:r?t:e}var Ig=class{static defaults=Wd;static instances=Mg;static overrides=Bd;static registry=$h;static version=Tg;static getChart=Ng;static register(...e){$h.add(...e),Lg()}static unregister(...e){$h.remove(...e),Lg()}constructor(e,t){let n=this.config=new xg(t),r=jg(e),i=Ng(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||(Dh(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=au(),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 eg,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=gd(e=>this.update(e),a.resizeDelay||0),this._dataChanges=[],Mg[this.id]=this,!o||!s){console.error(`Failed to create chart: can't acquire context from the given item`);return}Ip.listen(this,`complete`,kg),Ip.listen(this,`progress`,Ag),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:t},width:n,height:r,_aspectRatio:i}=this;return ou(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 $h}_initialize(){return this.notifyPlugins(`beforeInit`),this.options.responsive?this.resize():up(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins(`afterInit`),this}clear(){return Yd(this.canvas,this.ctx),this}stop(){return Ip.stop(this),this}resize(e,t){Ip.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,up(this,o,!0)&&(this.notifyPlugins(`resize`,{size:a}),mu(n.onResize,[this,a],this),this.attached&&this._doResize(s)&&this.render())}ensureScalesHaveIDs(){hu(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=ug(e,n),i=r===`r`,a=r===`x`;return{options:n,dposition:i?`chartArea`:a?`bottom`:`left`,dtype:i?`radialLinear`:a?`category`:`linear`}}))),hu(i,t=>{let i=t.options,a=i.id,o=ug(a,i),s=du(i.type,t.dtype);(i.position===void 0||Dg(i.position,o)!==Dg(t.dposition))&&(i.position=t.dposition),r[a]=!0;let c=null;a in n&&n[a].type===s?c=n[a]:(c=new($h.getScale(s))({id:a,type:s,ctx:this.ctx,chart:this}),n[c.id]=c),c.init(i,e)}),hu(r,(e,t)=>{e||delete n[t]}),hu(n,e=>{ih.configure(this,e,e.options),ih.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(Og(`z`,`_idx`));let{_active:o,_lastEvent:s}=this;s?this._eventHandler(s,!0):o.length&&this._updateHoverStyles(o,o,!0),this.render()}_updateScales(){hu(this.scales,e=>{ih.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options;(!Au(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)Pg(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;ih.update(this,this.width,this.height,e);let t=this.chartArea,n=t.width<=0||t.height<=0;this._layers=[],hu(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=Fp(this,e);this.notifyPlugins(`beforeDatasetDraw`,n)!==!1&&(r&&$d(t,r),e.controller.draw(),r&&ef(t),n.cancelable=!1,this.notifyPlugins(`afterDatasetDraw`,n))}isPointInArea(e){return Qd(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,t,n,r){let i=Vm.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||=bf(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);Ou(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(),Ip.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)};hu(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(){hu(this._listeners,(e,t)=>{this.platform.removeEventListener(this,t,e)}),this._listeners={},hu(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}});gu(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=ju(e),c=Fg(e,this._lastEvent,n,s);n&&(this._lastEvent=null,mu(i.onHover,[e,o,this],this),s&&mu(i.onClick,[e,o,this],this));let l=!gu(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 Lg(){return hu(Ig.instances,e=>e._plugins.invalidate())}function Rg(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,td(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,td(r-n));e.arc(i,a,s+l/2,n-t/2,r+t/2,!0)}else{let t=Math.min(l/2,o*td(r-n));if(u===`round`)e.arc(i,a,t,n-Mu/2,r+Mu/2,!0);else if(u===`bevel`){let o=2*t*t,s=-o*Math.cos(n+Mu/2)+i,c=-o*Math.sin(n+Mu/2)+a,l=o*Math.cos(r+Mu/2)+i,u=o*Math.sin(r+Mu/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 zg(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+Lu,r-Lu),e.closePath(),e.clip()}function Bg(e){return pf(e,[`outerStart`,`outerEnd`,`innerStart`,`innerEnd`])}function Vg(e,t,n,r){let i=Bg(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 rd(e,0,Math.min(a,t))};return{outerStart:s(i.outerStart),outerEnd:s(i.outerEnd),innerStart:rd(i.innerStart,0,o),innerEnd:rd(i.innerEnd,0,o)}}function Hg(e,t,n,r){return{x:n+e*Math.cos(t),y:r+e*Math.sin(t)}}function Ug(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/Mu)/d)/2,g=c+h+p,_=i-h-p,{outerStart:v,outerEnd:y,innerStart:b,innerEnd:x}=Vg(t,f,d,_-g),S=d-v,C=d-y,w=g+v/S,T=_-y/C,ee=f+b,te=f+x,ne=g+b/ee,re=_-x/te;if(e.beginPath(),a){let t=(w+T)/2;if(e.arc(o,s,d,w,t),e.arc(o,s,d,t,T),y>0){let t=Hg(C,T,o,s);e.arc(t.x,t.y,y,T,_+Lu)}let n=Hg(te,_,o,s);if(e.lineTo(n.x,n.y),x>0){let t=Hg(te,re,o,s);e.arc(t.x,t.y,x,_+Lu,re+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=Hg(ee,ne,o,s);e.arc(t.x,t.y,b,ne+Math.PI,g-Lu)}let i=Hg(S,g,o,s);if(e.lineTo(i.x,i.y),v>0){let t=Hg(S,w,o,s);e.arc(t.x,t.y,v,g-Lu,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(T)*d+o,i=Math.sin(T)*d+s;e.lineTo(r,i)}e.closePath()}function Wg(e,t,n,r,i){let{fullCircles:a,startAngle:o,circumference:s}=t,c=t.endAngle;if(a){Ug(e,t,n,r,c,i);for(let t=0;t=Mu&&p===0&&u!==`miter`&&Rg(e,t,h),a||(Ug(e,t,n,r,h,i),e.stroke())}var Kg=class extends Oh{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}=Qu(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=du(l,o-a),f=nd(r,a,o)&&a!==o,p=d>=Nu||f,m=ad(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>Nu?Math.floor(n/Nu):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(Mu,n||0)));e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,Wg(e,this,s,i,a),Gg(e,this,s,i,a),e.restore()}};function qg(e,t,n=t){e.lineCap=du(n.borderCapStyle,t.borderCapStyle),e.setLineDash(du(n.borderDash,t.borderDash)),e.lineDashOffset=du(n.borderDashOffset,t.borderDashOffset),e.lineJoin=du(n.borderJoinStyle,t.borderJoinStyle),e.lineWidth=du(n.borderWidth,t.borderWidth),e.strokeStyle=du(n.borderColor,t.borderColor)}function Jg(e,t,n){e.lineTo(n.x,n.y)}function Yg(e){return e.stepped?tf:e.tension||e.cubicInterpolationMode===`monotone`?nf:Jg}function Xg(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 $g(e){let t=e.options,n=t.borderDash&&t.borderDash.length;return!e._decimated&&!e._loop&&!t.tension&&t.cubicInterpolationMode!==`monotone`&&!t.stepped&&!n?Qg:Zg}function e_(e){return e.stepped?mp:e.tension||e.cubicInterpolationMode===`monotone`?hp:pp}function t_(e,t,n,r){let i=t._path;i||(i=t._path=new Path2D,t.path(i,n,r)&&i.closePath()),qg(e,t.options),e.stroke(i)}function n_(e,t,n,r){let{segments:i,options:a}=t,o=$g(t);for(let s of i)qg(e,a,s.style),e.beginPath(),o(e,t,s,{start:n,end:n+r-1})&&e.closePath(),e.stroke()}var r_=typeof Path2D==`function`;function i_(e,t,n,r){r_&&!t.options.segment?t_(e,t,n,r):n_(e,t,n,r)}var a_=class extends Oh{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;Xf(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||=Op(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=Tp(this,{property:t,start:r,end:r});if(!a.length)return;let o=[],s=e_(n),c,l;for(c=0,l=a.length;ce.replace(`rgb(`,`rgba(`).replace(`)`,`, 0.5)`));function b_(e){return v_[e%v_.length]}function x_(e){return y_[e%y_.length]}function S_(e,t){return e.borderColor=b_(t),e.backgroundColor=x_(t),++t}function C_(e,t){return e.backgroundColor=e.data.map(()=>b_(t++)),t}function w_(e,t){return e.backgroundColor=e.data.map(()=>x_(t++)),t}function T_(e){let t=0;return(n,r)=>{let i=e.getDatasetMeta(r).controller;i instanceof Dm?t=C_(n,t):i instanceof km?t=w_(n,t):i&&(t=S_(n,t))}}function E_(e){let t;for(t in e)if(e[t].borderColor||e[t].backgroundColor)return!0;return!1}function D_(e){return e&&(e.borderColor||e.backgroundColor)}function O_(){return Wd.borderColor!==`rgba(0,0,0,0.1)`||Wd.backgroundColor!==`rgba(0,0,0,0.1)`}var k_={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=E_(r)||D_(i)||a&&E_(a)||O_();if(!n.forceOverride&&o)return;let s=T_(e);r.forEach(s)}};function A_(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 j_(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(!ou(d)&&!ou(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 M_(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 N_(e){e.data.datasets.forEach(e=>{M_(e)})}function P_(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=rd(sd(t,a.axis,o).lo,0,n-1)),i=l?rd(sd(t,a.axis,s).hi+1,r,n)-r:n-r,{start:r,count:i}}var F_={id:`decimation`,defaults:{algorithm:`min-max`,enabled:!1},beforeElementsUpdate:(e,t,n)=>{if(!n.enabled){N_(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(vf([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}=P_(s,c);if(d<=(n.threshold||4*r)){M_(t);return}ou(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=A_(c,u,d,r,n);break;case`min-max`:f=j_(c,u,d,r);break;default:throw Error(`Unsupported decimation algorithm '${n.algorithm}'`)}t._decimated=f})},destroy(e){N_(e)}};function I_(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=z_(r,s,i);let c=L_(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=Tp(t,c);for(let t of l){let r=L_(n,a[t.start],a[t.end],t.loop),s=wp(e,i,r);for(let e of s)o.push({source:e,target:t,start:{[n]:B_(c,r,`start`,Math.max)},end:{[n]:B_(c,r,`end`,Math.min)}})}}return o}function L_(e,t,n,r){if(r)return;let i=t[e],a=n[e];return e===`angle`&&(i=td(i),a=td(a)),{property:e,start:i,end:a}}function R_(e,t){let{x:n=null,y:r=null}=e||{},i=t.points,a=[];return t.segments.forEach(({start:e,end:t})=>{t=z_(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 z_(e,t,n){for(;t>e;t--){let e=n[t];if(!isNaN(e.x)&&!isNaN(e.y))break}return t}function B_(e,t,n,r){return e&&t?r(e[n],t[n]):e?e[n]:t?t[n]:0}function V_(e,t){let n=[],r=!1;return su(e)?(r=!0,n=e):n=R_(e,t),n.length?new a_({points:n,options:{tension:0},_loop:r,_fullLoop:r}):null}function H_(e){return e&&e.fill!==!1}function U_(e,t,n){let r=e[t].fill,i=[t],a;if(!n)return r;for(;r!==!1&&i.indexOf(r)===-1;){if(!lu(r))return r;if(a=e[r],!a)return!1;if(a.visible)return r;i.push(r),r=a.fill}return!1}function W_(e,t,n){let r=J_(e);if(cu(r))return!isNaN(r.value)&&r;let i=parseFloat(r);return lu(i)&&Math.floor(i)===i?G_(r[0],t,i,n):[`origin`,`start`,`end`,`stack`,`shape`].indexOf(r)>=0&&r}function G_(e,t,n,r){return(e===`-`||e===`+`)&&(n=t+n),n===t||n<0||n>=r?!1:n}function K_(e,t){let n=null;return e===`start`?n=t.bottom:e===`end`?n=t.top:cu(e)?n=t.getPixelForValue(e.value):t.getBasePixel&&(n=t.getBasePixel()),n}function q_(e,t,n){let r;return r=e===`start`?n:e===`end`?t.options.reverse?t.min:t.max:cu(e)?e.value:t.getBaseValue(),r}function J_(e){let t=e.options,n=t.fill,r=du(n&&n.target,n);return r===void 0&&(r=!!t.backgroundColor),r===!1||r===null?!1:r===!0?`origin`:r}function Y_(e){let{scale:t,index:n,line:r}=e,i=[],a=r.segments,o=r.points,s=X_(t,n);s.push(V_({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&&av(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;H_(n)&&av(e.ctx,n,e.chartArea)}},beforeDatasetDraw(e,t,n){let r=t.meta.$filler;!H_(r)||n.drawTime!==`beforeDatasetDraw`||av(e.ctx,r,e.chartArea)},defaults:{propagate:!0,drawTime:`beforeDatasetDraw`}},pv=(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)}},mv=(e,t)=>e!==null&&t!==null&&e.datasetIndex===t.datasetIndex&&e.index===t.index,hv=class extends Oh{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=mu(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=_f(n.font),i=r.size,a=this._computeTitleHeight(),{boxWidth:o,itemHeight:s}=pv(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}=gv(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=vp(i,this.left,this.width);if(this.isHorizontal()){let i=0,o=vd(n,this.left+r,this.right-this.lineWidths[i]);for(let s of t)i!==s.row&&(i=s.row,o=vd(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=vd(n,this.top+e+r,this.bottom-this.columnSizes[i].height);for(let s of t)s.col!==i&&(i=s.col,o=vd(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;$d(e,this),this._draw(),ef(e)}}_draw(){let{options:e,columnSizes:t,lineWidths:n,ctx:r}=this,{align:i,labels:a}=e,o=Wd.color,s=vp(e.rtl,this.left,this.width),c=_f(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}=pv(a,u),g=function(e,t,n){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;r.save();let i=du(n.lineWidth,1);if(r.fillStyle=du(n.fillStyle,o),r.lineCap=du(n.lineCap,`butt`),r.lineDashOffset=du(n.lineDashOffset,0),r.lineJoin=du(n.lineJoin,`miter`),r.lineWidth=i,r.strokeStyle=du(n.strokeStyle,o),r.setLineDash(du(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;Zd(r,o,c,l,a.pointStyleWidth&&p)}else{let a=t+Math.max((u-m)/2,0),o=s.leftForLtr(e,p),c=hf(n.borderRadius);r.beginPath(),Object.values(c).some(e=>e!==0)?cf(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){sf(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:vd(i,this.left+l,this.right-n[0]),y:this.top+l+y,line:0}:{x:this.left+l,y:vd(i,this.top+y+l,this.bottom-t[0].height),line:0},yp(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=vd(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=vd(i,this.top+y+l,this.bottom-t[f.line].height));let w=s.x(S);if(g(w,C,o),S=yd(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+=yv(o,e)+l}else f.y+=b}),bp(this.ctx,e.textDirection)}drawTitle(){let e=this.options,t=e.title,n=_f(t.font),r=gf(t.padding);if(!t.display)return;let i=vp(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=vd(e.align,u,this.right-d);else{let t=this.columnSizes.reduce((e,t)=>Math.max(e,t.height),0);l=c+vd(e.align,this.top,this.bottom-t-e.labels.padding-this._computeTitleHeight())}let f=vd(o,u,u+d);a.textAlign=i.textAlign(_d(o)),a.textBaseline=`middle`,a.strokeStyle=t.color,a.fillStyle=t.color,a.font=n.string,sf(a,t.text,f,l,n)}_computeTitleHeight(){let e=this.options.title,t=_f(e.font),n=gf(e.padding);return e.display?t.lineHeight+n.height:0}_getLegendItemAt(e,t){let n,r,i;if(ad(e,this.left,this.right)&&ad(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 vv(e,t,n){let r=e;return typeof t.text!=`string`&&(r=yv(t,n)),r}function yv(e,t){return t*(e.text?e.text.length:0)}function bv(e,t){return!!((e===`mousemove`||e===`mouseout`)&&(t.onHover||t.onLeave)||t.onClick&&(e===`click`||e===`mouseup`))}var xv={id:`legend`,_element:hv,start(e,t,n){let r=e.legend=new hv({ctx:e.ctx,options:n,chart:e});ih.configure(e,r,n),ih.addBox(e,r)},stop(e){ih.removeBox(e,e.legend),delete e.legend},beforeUpdate(e,t,n){let r=e.legend;ih.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=gf(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 Oh{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=su(n.text)?n.text.length:1;this._padding=gf(n.padding);let i=r*_f(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=vd(o,n,i),u=t+e,c=i-n):(a.position===`left`?(l=n+e,u=vd(o,r,t),s=Mu*-.5):(l=i-e,u=vd(o,t,r),s=Mu*.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=_f(t.font),r=n.lineHeight/2+this._padding.top,{titleX:i,titleY:a,maxWidth:o,rotation:s}=this._drawArgs(r);sf(e,t.text,0,0,n,{color:t.color,maxWidth:o,rotation:s,textAlign:_d(t.align),textBaseline:`middle`,translation:[i,a]})}};function Cv(e,t){let n=new Sv({ctx:e.ctx,options:t,chart:e});ih.configure(e,n,t),ih.addBox(e,n),e.titleBlock=n}var wv={id:`title`,_element:Sv,start(e,t,n){Cv(e,n)},stop(e){let t=e.titleBlock;ih.removeBox(e,t),delete e.titleBlock},beforeUpdate(e,t,n){let r=e.titleBlock;ih.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}},Tv=new WeakMap,Ev={id:`subtitle`,start(e,t,n){let r=new Sv({ctx:e.ctx,options:n,chart:e});ih.configure(e,r,n),ih.addBox(e,r),Tv.set(e,r)},stop(e){ih.removeBox(e,Tv.get(e)),Tv.delete(e)},beforeUpdate(e,t,n){let r=Tv.get(e);ih.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}},Dv={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 Av(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 jv(e,t){let n=e.chart.ctx,{body:r,footer:i,title:a}=e,{boxWidth:o,boxHeight:s}=t,c=_f(t.bodyFont),l=_f(t.titleFont),u=_f(t.footerFont),d=a.length,f=i.length,p=r.length,m=gf(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,hu(e.title,y),n.font=c.string,hu(e.beforeBody.concat(e.afterBody),y),v=t.displayColors?o+2+t.boxPadding:0,hu(r,e=>{hu(e.before,y),hu(e.lines,y),hu(e.after,y)}),v=0,n.font=u.string,hu(e.footer,y),n.restore(),g+=m.width,{width:g,height:h}}function Mv(e,t){let{y:n,height:r}=t;return ne.height-r/2?`bottom`:`center`}function Nv(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 Pv(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`),Nv(l,e,t,n)&&(l=`center`),l}function Fv(e,t,n){let r=n.yAlign||t.yAlign||Mv(e,n);return{xAlign:n.xAlign||t.xAlign||Pv(e,t,n,r),yAlign:r}}function Iv(e,t){let{x:n,width:r}=e;return t===`right`?n-=r:t===`center`&&(n-=r/2),n}function Lv(e,t,n){let{y:r,height:i}=e;return t===`top`?r+=n:t===`bottom`?r-=i+n:r-=i/2,r}function Rv(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}=hf(o),m=Iv(t,s),h=Lv(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:rd(m,0,r.width-t.width),y:rd(h,0,r.height-t.height)}}function zv(e,t,n){let r=gf(n.padding);return t===`center`?e.x+e.width/2:t===`right`?e.x+e.width-r.right:e.x+r.left}function Bv(e){return Ov([],kv(e))}function Vv(e,t,n){return bf(e,{tooltip:t,tooltipItems:n,type:`tooltip`})}function Hv(e,t){let n=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return n?e.override(n):e}var Uv={beforeTitle:iu,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=Hv(n,e);Ov(t.before,kv(Wv(i,`beforeLabel`,this,e))),Ov(t.lines,Wv(i,`label`,this,e)),Ov(t.after,kv(Wv(i,`afterLabel`,this,e))),r.push(t)}),r}getAfterBody(e,t){return Bv(Wv(t.callbacks,`afterBody`,this,e))}getFooter(e,t){let{callbacks:n}=t,r=Wv(n,`beforeFooter`,this,e),i=Wv(n,`footer`,this,e),a=Wv(n,`afterFooter`,this,e),o=[];return o=Ov(o,kv(r)),o=Ov(o,kv(i)),o=Ov(o,kv(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))),hu(o,t=>{let n=Hv(e.callbacks,t);r.push(Wv(n,`labelColor`,this,t)),i.push(Wv(n,`labelPointStyle`,this,t)),a.push(Wv(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=Dv[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=jv(this,n),o=Object.assign({},e,t),s=Fv(this.chart,n,o),c=Rv(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}=hf(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=vp(n.rtl,this.x,this.width);for(e.x=zv(this,n.titleAlign,n),t.textAlign=c.textAlign(n.titleAlign),t.textBaseline=`middle`,a=_f(n.titleFont),o=n.titleSpacing,t.fillStyle=n.titleColor,t.font=a.string,s=0;se!==0)?(e.beginPath(),e.fillStyle=i.multiKeyBackground,cf(e,{x:t,y:p,w:c,h:s,radius:o}),e.fill(),e.stroke(),e.fillStyle=a.backgroundColor,e.beginPath(),cf(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=_f(n.bodyFont),d=u.lineHeight,f=0,p=vp(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=zv(this,h,n),t.fillStyle=n.bodyColor,hu(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=Dv[e.position].call(this,this._active,this._eventPosition);if(!n)return;let a=this._size=jv(this,e),o=Object.assign({},n,this._size),s=Fv(t,e,o),c=Rv(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=gf(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),yp(e,t.textDirection),i.y+=a.top,this.drawTitle(i,e,t),this.drawBody(i,e,t),this.drawFooter(i,e,t),bp(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=!gu(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||!gu(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=Dv[i.position].call(this,e,t);return a!==!1&&(n!==a.x||r!==a.y)}},Kv=Object.freeze({__proto__:null,Colors:k_,Decimation:F_,Filler:fv,Legend:xv,SubTitle:Ev,Title:wv,Tooltip:{id:`tooltip`,_element:Gv,positioners:Dv,afterInit(e,t,n){n&&(e.tooltip=new Gv({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:Uv},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`]}}),qv=(e,t,n,r)=>(typeof t==`string`?(n=e.push(t)-1,r.unshift({index:n,label:t})):isNaN(t)&&(n=null),n);function Jv(e,t,n,r){let i=e.indexOf(t);return i===-1?qv(e,t,n,r):i===e.lastIndexOf(t)?i:n}var Yv=(e,t)=>e===null?null:rd(Math.round(e),0,t);function Xv(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 Qv(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=!ou(a),_=!ou(o),v=!ou(c),y=(h-m)/(u+1),b=Uu((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=Uu(w*b/p/f)*f),ou(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&&qu((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=Hu(w,Math.round(w),b/1e3)?Math.round(w):Math.ceil(w));let T=Math.max(Zu(b),Zu(S));x=10**(ou(s)?T:s),S=Math.round(S*x)/x,C=Math.round(C*x)/x;let ee=0;for(g&&(d&&S!==a?(n.push({value:a}),So)break;n.push({value:e})}return _&&d&&C!==o?n.length&&Hu(n[n.length-1].value,o,$v(o,y,e))?n[n.length-1].value=o:n.push({value:o}):(!_||C===o)&&n.push({value:C}),n}function $v(e,t,{horizontal:n,minRotation:r}){let i=Yu(r),a=(n?Math.sin(i):Math.cos(i))||.001,o=.75*t*(``+e).length;return Math.min(t/a,o)}var ey=class extends Jh{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 ou(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=Vu(r),t=Vu(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=Qv({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`&&Ju(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 Fd(e,this.chart.options.locale,this.options.ticks.format)}},ty=class extends ey{static id=`linear`;static defaults={ticks:{callback:Rd.formatters.numeric}};determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=lu(e)?e:0,this.max=lu(t)?t:1,this.handleTickRangeOptions()}computeTickLimit(){let e=this.isHorizontal(),t=e?this.width:this.height,n=Yu(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}},ny=e=>Math.floor(Bu(e)),ry=(e,t)=>10**(ny(e)+t);function iy(e){return e/10**ny(e)==1}function ay(e,t,n){let r=10**n,i=Math.floor(e/r);return Math.ceil(t/r)-i}function oy(e,t){let n=ny(t-e);for(;ay(e,t,n)>10;)n++;for(;ay(e,t,n)<10;)n--;return Math.min(n,ny(e))}function sy(e,{min:t,max:n}){t=uu(e.min,t);let r=[],i=ny(t),a=oy(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=uu(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=uu(e.max,f);return r.push({value:p,major:iy(p),significand:d}),r}var cy=class extends Jh{static id=`logarithmic`;static defaults={ticks:{callback:Rd.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=ey.prototype.parse.apply(this,[e,t]);if(n===0){this._zero=!0;return}return lu(n)&&n>0?n:null}determineDataLimits(){let{min:e,max:t}=this.getMinMax(!0);this.min=lu(e)?Math.max(0,e):null,this.max=lu(t)?Math.max(0,t):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!lu(this._userMin)&&(this.min=e===ry(this.min,0)?ry(this.min,-1):ry(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(ry(n,-1)),a(ry(r,1)))),n<=0&&i(ry(r,-1)),r<=0&&a(ry(n,1)),this.min=n,this.max=r}buildTicks(){let e=this.options,t=sy({min:this._userMin,max:this._userMax},this);return e.bounds===`ticks`&&Ju(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`:Fd(e,this.chart.options.locale,this.options.ticks.format)}configure(){let e=this.min;super.configure(),this._startValue=Bu(e),this._valueRange=Bu(this.max)-Bu(e)}getPixelForValue(e){return(e===void 0||e===0)&&(e=this.min),e===null||isNaN(e)?NaN:this.getPixelForDecimal(e===this.min?0:(Bu(e)-this._startValue)/this._valueRange)}getValueForPixel(e){let t=this.getDecimalForPixel(e);return 10**(this._startValue+t*this._valueRange)}};function ly(e){let t=e.ticks;if(t.display&&e.display){let e=gf(t.backdropPadding);return du(t.font&&t.font.size,Wd.font.size)+e.height}return 0}function uy(e,t,n){return n=su(n)?n:[n],{w:qd(e,t.string,n),h:n.length*t.lineHeight}}function dy(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 fy(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?Mu/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 my(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(Xu(td(c.angle+Lu))),u=yy(c.y,s.h,l),d=_y(l),f=vy(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 hy(e,t){if(!t)return!0;let{left:n,top:r,right:i,bottom:a}=e;return!(Qd({x:n,y:r},t)||Qd({x:n,y:a},t)||Qd({x:i,y:r},t)||Qd({x:i,y:a},t))}function gy(e,t,n){let r=[],i=e._pointLabels.length,a=e.options,{centerPointLabels:o,display:s}=a.pointLabels,c={extra:ly(a)/2,additionalAngle:o?Mu/i:0},l;for(let a=0;a270||n<90)&&(e-=t),e}function by(e,t,n){let{left:r,top:i,right:a,bottom:o}=n,{backdropColor:s}=t;if(!ou(s)){let n=hf(t.borderRadius),c=gf(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(),cf(e,{x:l,y:u,w:d,h:f,radius:n}),e.fill()):e.fillRect(l,u,d,f)}}function xy(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));by(n,a,t);let o=_f(a.font),{x:s,y:c,textAlign:l}=t;sf(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,Nu);else{let n=e.getPointPosition(0,t);i.moveTo(n.x,n.y);for(let a=1;a{let n=mu(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?fy(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=Nu/(this._pointLabels.length||1),n=this.options.startAngle||0;return td(e*t+Yu(n))}getDistanceFromCenterForValue(e){if(ou(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(ou(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=_f(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=gf(s.backdropPadding);e.fillRect(-a/2-t.left,-i-c.size/2-t.top,a+t.width,c.size+t.height)}sf(e,r.label,0,-i,c,{color:s.color,strokeColor:s.textStrokeColor,strokeWidth:s.textStrokeWidth})}),e.restore()}drawTitle(){}},Ey={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}},Dy=Object.keys(Ey);function Oy(e,t){return e-t}function ky(e,t){if(ou(t))return null;let n=e._adapter,{parser:r,round:i,isoWeekday:a}=e._parseOpts,o=t;return typeof r==`function`&&(o=r(o)),lu(o)||(o=typeof r==`string`?n.parse(o,r):n.parse(o)),o===null?null:(i&&(o=i===`week`&&(Ku(a)||a===!0)?n.startOf(o,`isoWeek`,a):n.startOf(o,i)),+o)}function Ay(e,t,n,r){let i=Dy.length;for(let a=Dy.indexOf(e);a=Dy.indexOf(n);a--){let n=Dy[a];if(Ey[n].common&&e._adapter.diff(i,r,n)>=t-1)return n}return Dy[n?Dy.indexOf(n):0]}function My(e){for(let t=Dy.indexOf(e)+1,n=Dy.length;t=t?n[r]:n[i];e[a]=!0}}function Py(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 Fy(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=rd(t,0,a),n=rd(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||Ay(i.minUnit,t,n,this._getLabelCapacity(t)),o=du(r.ticks.stepSize,1),s=a===`week`&&i.isoWeekday,c=Ku(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 mu(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}=sd(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}=sd(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 Ry=class extends Iy{static id=`timeseries`;static defaults=Iy.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=Ly(t,this.min),this._tableRange=Ly(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(Ly(this._table,e)-this._minPos)/this._tableRange}getValueForPixel(e){let t=this._offsets,n=this.getDecimalForPixel(e)/t.factor-t.end;return Ly(this._table,n*this._tableRange+this._minPos,!0)}},zy=[Am,__,Kv,Object.freeze({__proto__:null,CategoryScale:Zv,LinearScale:ty,LogarithmicScale:cy,RadialLinearScale:Ty,TimeScale:Iy,TimeSeriesScale:Ry})];Ig.register(...zy);var By=Ig,Vy=z(``);function Hy(e,t){D(t,!0);let n=K(t,`class`,3,``),r=K(t,`ariaLabel`,3,``);function i(e){if(Da.tick,typeof t.build!=`function`)return;let n=t.build();if(!n)return;let r=new By(e.getContext(`2d`),n);return()=>r.destroy()}var a=Vy();ji(a,()=>i),I(()=>{W(a,1,Pi(n())),G(a,`aria-label`,r())}),B(e,a),O()}var Uy=z(``),Wy=z(`
        `);function Gy(e,t){D(t,!0);let n=K(t,`options`,19,()=>[]),r=K(t,`ariaLabel`,3,``),i=K(t,`class`,3,``);var a=Wy();U(a,21,n,e=>e.value,(e,n)=>{var r=Uy();let i;var a=N(r,!0);E(r),I(()=>{i=W(r,1,`segmented-btn svelte-92fh5i`,null,i,{active:t.value===L(n).value}),G(r,`aria-pressed`,t.value===L(n).value),V(a,L(n).label)}),R(`click`,r,()=>t.onchange?.(L(n).value)),B(e,r)}),E(a),I(()=>{W(a,1,Pi([`segmented-control`,i()]),`svelte-92fh5i`),G(a,`aria-label`,r())}),B(e,a),O()}Vr([`click`]);function Ky(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function qy(){return{grid:Ky(`--chart-grid`),text:Ky(`--chart-text`),dayMarker:Ky(`--chart-day-marker`),tooltipBg:Ky(`--chart-tooltip-bg`),tooltipBorder:Ky(`--chart-tooltip-border`),tooltipText:Ky(`--chart-tooltip-text`)}}function Jy(){return{size:11,family:`'SF Mono', Menlo, Consolas, monospace`}}function Yy(e,t){return{backgroundColor:e.tooltipBg,borderColor:e.tooltipBorder,borderWidth:1,titleColor:e.tooltipText,bodyColor:e.tooltipText,callbacks:t}}function Xy(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 Zy=[`#c2845a`,`#7a9e7e`,`#d4a574`,`#b8a98e`,`#8b9e6b`,`#7d8a97`,`#c47a5a`,`#6b8e6b`,`#a09486`,`#9b7ea4`,`#c49a6c`];function Qy(){return[...Zy]}function $y(e){let t=5381,n=String(e||``);for(let e=0;exc(e)}}var ab={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}},ob=[{value:`seconds`,label:`Seconds`},{value:`minutes`,label:`Minutes`},{value:`hours`,label:`Hours`},{value:`days`,label:`Days`}];function sb(){return{input:0,output:0,prompt:0,local:0}}function cb(e){return String(e).padStart(2,`0`)}function lb(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}function ub(e,t){if(!Number.isFinite(t))return``;let n=new Date(t);switch(e){case`seconds`:return cb(n.getHours())+`:`+cb(n.getMinutes())+`:`+cb(n.getSeconds());case`minutes`:return cb(n.getHours())+`:`+cb(n.getMinutes());case`hours`:return cb(n.getHours())+`:00`;default:return cb(n.getMonth()+1)+`-`+cb(n.getDate())}}function db(e,t){let n=[],r=[],i={input:[],output:[],prompt:[],local:[]},a=sb();for(let o of e||[]){let e=Date.parse(o&&o.start),s=lb(o&&o.input_tokens),c=lb(o&&o.output_tokens),l=lb(o&&o.prompt_cached_tokens),u=lb(o&&o.locally_cached_tokens);n.push(ub(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 fb(e){let t=e||sb();return t.input+t.output+t.prompt+t.local>0}function pb(e,t){return xc(Math.max(0,Math.round(e&&e[t]||0)))}function mb(e){return(ab[e]||ab.minutes).windowLabel}function hb(e,t){return`Live token throughput, `+mb(t).toLowerCase()+`. Input `+pb(e,`input`)+`, output `+pb(e,`output`)+`, prompt cached `+pb(e,`prompt`)+`, locally cached `+pb(e,`local`)+` tokens.`}function gb(e,t,n,r){let i=e=>xc(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 _b=900,vb=new class{#e=A(`minutes`);get granularity(){return L(this.#e)}set granularity(e){j(this.#e,e,!0)}#t=A(M([]));get buckets(){return L(this.#t)}set buckets(e){j(this.#t,e,!0)}#n=A(!1);get active(){return L(this.#n)}set active(e){j(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){!ab[e]||e===this.granularity||(this.granularity=e,this.buckets=[],this.#l(),this.fetch())}#l(){this.#r&&=(clearInterval(this.#r),null);let e=ab[this.granularity]||ab.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()},_b))}async fetch(){if(!this.active||this.#c)return;this.#c=!0;let e=this.granularity;try{let t=await Ts(`/admin/usage/throughput?granularity=`+(ab[e]||ab.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(Ds(e))return;console.error(`Failed to fetch token throughput:`,e)}finally{this.#c=!1,this.active&&this.granularity!==e&&this.fetch()}}async#u(){await As.ensureLoaded(),this.active&&As.liveLogsVisible()&&(typeof ReadableStream>`u`||(this.#s&&this.#s.abort(),this.#s=new AbortController,this.#d(this.#s)))}async#d(e){let t=()=>{e.signal.aborted||this.#s!==e||this.#p()};try{let n=await Cs(`/admin/live/logs?types=usage`,{signal:e.signal});if(!n.ok||!n.body||typeof n.body.getReader!=`function`){t();return}this.#o=0,await tb(n.body.getReader(),e=>this.#f(e)),t()}catch(n){if(Ds(n)||e.signal.aborted)return;console.error(`Live usage stream failed:`,n),t()}}#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}=rb(this.#o);this.#o=e,this.#a=setTimeout(()=>{this.#a=null,this.#u()},t)}},yb=z(`
        `),bb=z(`
        Waiting for live requests…
        `),xb=z(`

        Live Token Throughput

        `);function Sb(e,t){D(t,!0);let n=k(()=>db(vb.buckets,vb.granularity)),r=k(()=>L(n).totals);function i(){return{input:Xy(`var(--token-input)`),output:Xy(`var(--token-output)`),prompt:Xy(`var(--token-prompt)`),local:Xy(`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=xb(),s=N(o),c=N(s),l=F(N(c),2),u=N(l);let d;var f=F(u,2),p=N(f,!0);E(f),E(l),E(c),Gy(F(c,2),{ariaLabel:`Live token throughput granularity`,get options(){return ob},get value(){return vb.granularity},onchange:e=>vb.setGranularity(e)}),E(s);var m=F(s,2);U(m,21,()=>a,e=>e.metric,(e,t)=>{var n=yb(),i=N(n),a=F(i,2),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(n),I(e=>{Vi(i,`background: var(${L(t).colorVar??``})`),V(o,L(t).label),V(c,e)},[()=>pb(L(r),L(t).metric)]),B(e,n)}),E(m);var h=F(m,2),g=N(h);{let e=k(()=>hb(L(r),vb.granularity));Hy(g,{get ariaLabel(){return L(e)},build:()=>gb(qy(),i(),L(n),vb.granularity)})}var _=F(g,2),v=e=>{B(e,bb())},y=k(()=>!fb(L(r)));H(_,e=>{L(y)&&e(v)}),E(h),E(o),I(e=>{d=W(u,1,`live-dot`,null,d,{"is-streaming":vb.active}),V(p,e)},[()=>mb(vb.granularity)]),B(e,o),O()}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 wb(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 Tb(e,t,n){let r=Number(e&&e.total_requests||0);return(Number.isFinite(r)?r:0)+wb(t,n)}function Eb(e,t,n){let r=wb(t,n);return r<=0?``:_c(Tb(e,t,n)-r)+` to providers + `+_c(r)+` from cache`}function Db(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 Ob(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 `+_c(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 kb(e,t,n){return Ob(e,t,n).reduce((e,t)=>e+t.tokens,0)}function Ab(e,t,n){return kb(e,t,n)>0}function jb(e,t,n){let r=Ob(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 Mb(e,t,n){return jb(e,t,n).filter(e=>e.tokens>0)}function Nb(e){let t=[e.label+`: `+_c(e.tokens)+` input tokens (`+e.pct+`%)`];return e.note&&t.push(e.note),t.join(` +`)}function Pb(e){let t=(e||[]).map(e=>e.label+` `+e.pct+`%`);return`Cache breakdown of input tokens — `+(t.length?t.join(`, `):`no data`)}function Fb(e){return e.getUTCFullYear()+`-`+String(e.getUTCMonth()+1).padStart(2,`0`)+`-`+String(e.getUTCDate()).padStart(2,`0`)}function Ib(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=Fb(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 Lb(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 Rb(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 zb(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 Bb(e){return zb(e)?Math.round(Rb(e))+`%`:`—`}function Vb(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:Yy(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:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:10}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:ib(e)}}}}}function Hb(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 Ub=`gomodel_provider_status_details_expanded`,Wb=`gomodel_provider_card_expanded_overrides`,Gb=3e3,Kb=`https://gomodel.enterpilot.io/docs/providers/`,qb={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 Jb(){return{summary:{total:0,healthy:0,degraded:0,unhealthy:0,overall_status:`degraded`},providers:[]}}function Yb(e){let t={detailsExpanded:!1,cardOverrides:{}};try{if(e){let n=e.getItem(Ub);n===`true`||n===`false`?t.detailsExpanded=n===`true`:e.setItem(Ub,`false`);let r=JSON.parse(e.getItem(Wb)||`{}`);r&&typeof r==`object`&&!Array.isArray(r)&&(t.cardOverrides=r)}}catch{}return t}function Xb(e,t){if(e)try{e.setItem(Ub,t?`true`:`false`)}catch{}}function Zb(e,t){if(e)try{e.setItem(Wb,JSON.stringify(t))}catch{}}function Qb(e,t,n){let r=n&&n.name?String(n.name):``;return r&&Object.prototype.hasOwnProperty.call(e,r)?e[r]===!0:t}function $b(e){return`is-`+(String(e&&e.overall_status||`degraded`).trim()||`degraded`)}function ex(e){return`is-`+(String(e||`degraded`).trim()||`degraded`)}function tx(e){let t=e||{};return String(t.healthy||0)+`/`+String(t.total||0)}function nx(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 ax(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 ox(e,t){let n=ax(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 sx(e,t){let n=ax(e);return n?typeof t==`function`?t(n):String(n):``}function cx(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 lx(e){let t=String(e&&(e.type||e.config&&e.config.type)||``).trim().toLowerCase(),n=t?qb[t]:``;return n?Kb+n+`?utm_source=gomodel_dashboard`:``}function ux(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 dx(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 fx(e){let t=e&&e.config&&Array.isArray(e.config.models)?e.config.models.filter(Boolean):[];return t.length===0?`Automatic`:t.join(`, `)}function px(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 mx(e){let t=e&&e.request_health;return t&&typeof t==`object`?t:null}function hx(e){let t=mx(e);return t?String(t.circuit_state||``).trim():``}function gx(e){let t=hx(e);return t?t.charAt(0).toUpperCase()+t.slice(1):``}function _x(e){let t=hx(e);return t===`open`?`is-unhealthy`:t===`half-open`?`is-degraded`:`is-healthy`}function vx(e){let t=mx(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 yx(e){let t=mx(e);return t&&Array.isArray(t.models)?t.models:[]}function bx(e){return e?String(Number(e.errors||0))+`/`+String(Number(e.requests||0))+` failed`:``}function xx(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 wx(e){return String(e&&(e.slug||e.name)||``).trim()}function Tx(e){return String(e&&e.status||``).trim()||`connecting`}function Ex(e){switch(Tx(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 Dx(e,t){let n=Tx(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 Ox(e){return String(e&&e.transport||``)===`stdio`?`local command`:String(e&&e.url||``).trim()||`—`}function kx(e){let t=Number(e&&e.prompt_count||0),n=Number(e&&e.resource_count||0);return t+` prompts · `+n+` resources`}function Ax(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 jx(e){return String(e||``).split(` +`).map(e=>e.trim()).filter(e=>e)}function Mx(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.keys(e).sort().map(t=>({name:t,value:String(e[t]||``)}))}function Nx(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 Px(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 Fx(e){return{name:String(e.name||``).trim(),slug:wx(e),url:String(e.url||``).trim(),transport:e.transport===`sse`?`sse`:`http`,description:String(e.description||``).trim(),enabled:e.enabled!==!1,headers:Mx(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 Ix(e,t,n){let r=String(e.name||``).trim(),i=String(e.slug||Ax(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=>wx(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:Nx(e.headers),description:String(e.description||``).trim(),enabled:!!e.enabled,allowed_tools:hc(e.allowed_tools),disallowed_tools:hc(e.disallowed_tools),user_paths:jx(e.user_paths),tool_timeout_seconds:s}}}function Lx(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 Rx(e,t){return String(e&&e.server||``)+`_`+String(t||``)}function zx(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:Rx(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 Bx(e){return zx(e).length===0}function Vx(e){return(e||[]).length}function Hx(e){return(e||[]).filter(e=>Tx(e)===`connected`).length}function Ux(e){return(e||[]).filter(e=>e&&e.enabled!==!1&&Tx(e)===`degraded`).length}function Wx(e,t){return!!e&&Vx(t)>0}function Gx(e){return String(Hx(e))+`/`+String(Vx(e))}function Kx(e){return Ux(e)>0?`is-degraded`:`is-healthy`}function qx(e){let t=Ux(e);if(t>0)return String(t)+` server`+(t===1?``:`s`)+` need`+(t===1?`s`:``)+` attention`;let n=Vx(e),r=Hx(e);return n>0&&r===n?`All MCP servers connected`:String(r)+` of `+String(n)+` server`+(n===1?``:`s`)+` connected`}function Jx(){return{interval:`day`,buckets:[],summary:{requests:0},provider_latency:[]}}function Yx(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 Xx(e){return Number(e&&e.summary&&e.summary.requests||0)>0}function Zx(e){return(e&&Array.isArray(e.provider_latency)?e.provider_latency:[]).length>0}function Qx(e){let t=e&&e.summary?e.summary.success_rate:null;return t==null?`—`:(Math.round(Number(t)*1e3)/10).toFixed(1)+`%`}function $x(e,t){return Number(e&&e.summary&&e.summary[t]||0)}function eS(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 tS(e){let t=e&&e.summary?e.summary.avg_duration_ms:null;return t==null?`—`:eS(Number(t))}function nS(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 rS(e,t,n){let r=new Date(e.start);if(Number.isNaN(r.getTime()))return String(e.start||``);let i=nS(r,n),a=i.month+` `+i.day;return t!==`hour`||i.hour===0?a:String(i.hour).padStart(2,`0`)+`:00`}function iS(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=nS(i,n);return a.month+` `+a.day+`, `+a.year}function aS(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 oS(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=>rS(e,r,i)),c=aS(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:Yy(e,{title:e=>e.length?iS(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:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{stacked:!0,beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),precision:0,callback:e=>xc(e)}}}}}}function sS(e=Qy()){let t={};return function(n){return n in t||(t[n]=e[Object.keys(t).length%e.length]),t[n]}}function cS(e,t,n,r={}){let i=r.interval===`hour`?`hour`:`day`,a=r.zone,o=r.formatTimestamp||(e=>String(e)),s=r.providerColor||sS();return{type:`line`,data:{labels:t.map(e=>rS(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:Yy(e,{title:e=>e.length?iS(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+`: `+eS(e.parsed.y)+(r>0?` (`+r.toLocaleString()+` req)`:``)}})},scales:{x:{grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),maxRotation:0,autoSkip:!0,maxTicksLimit:12}},y:{beginAtZero:!0,grid:{color:e.grid},border:{display:!1},ticks:{color:e.text,font:Jy(),callback:e=>eS(e)}}}}}}var lS=class{#e=A(M(Jb()));get status(){return L(this.#e)}set status(e){j(this.#e,e,!0)}#t=A(!1);get loading(){return L(this.#t)}set loading(e){j(this.#t,e,!0)}#n=A(!1);get loadedOnce(){return L(this.#n)}set loadedOnce(e){j(this.#n,e,!0)}#r=A(!1);get detailsExpanded(){return L(this.#r)}set detailsExpanded(e){j(this.#r,e,!0)}#i=A(M({}));get cardOverrides(){return L(this.#i)}set cardOverrides(e){j(this.#i,e,!0)}#a=null;#o=null;#s=!1;initPreferences(){if(this.#s)return;this.#s=!0;let e=Yb(Sa());this.detailsExpanded=e.detailsExpanded,this.cardOverrides=e.cardOverrides}cardExpanded(e){return Qb(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,Zb(Sa(),this.cardOverrides)}toggleDetails(){this.detailsExpanded=!this.detailsExpanded,this.cardOverrides={},Xb(Sa(),this.detailsExpanded),Zb(Sa(),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 Ts(`/admin/providers/status`,{label:`provider status`,signal:e.signal});if(t.stale||e.signal.aborted)return;if(!t.ok){this.status=Jb(),this.#l();return}let n=t.data&&typeof t.data==`object`?t.data:Jb();n.summary||=Jb().summary,Array.isArray(n.providers)||(n.providers=[]),this.status=n,this.#c()}catch(e){if(Ds(e))return;console.error(`Failed to fetch provider status:`,e),this.status=Jb(),this.#l()}finally{this.#a===e&&(this.#a=null,this.loading=!1,this.loadedOnce=!0)}}#c(){this.#l(),ix(this.status.providers)&&(this.#o=setTimeout(()=>{this.#o=null,this.fetch()},Gb))}#l(){this.#o&&=(clearTimeout(this.#o),null)}stopPolling(){this.#l()}},uS=class{#e=A(M(Jx()));get stats(){return L(this.#e)}set stats(e){j(this.#e,e,!0)}#t=A(!1);get loading(){return L(this.#t)}set loading(e){j(this.#t,e,!0)}#n=0;async fetch(){let e=++this.#n;this.loading=!0;try{let t=await Ts(`/admin/audit/stats?`+Uc.queryStr(),{label:`audit stats`});if(t.stale||e!==this.#n)return;if(!t.ok){this.stats=Jx();return}this.stats=Yx(t.data)}catch(t){if(console.error(`Failed to fetch audit stats:`,t),e!==this.#n)return;this.stats=Jx()}finally{e===this.#n&&(this.loading=!1)}}},dS=class{#e=A(M([]));get servers(){return L(this.#e)}set servers(e){j(this.#e,e,!0)}#t=A(!1);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}async fetch(){if(await As.ensureLoaded(),!As.mcpVisible()){this.available=!1,this.servers=[];return}this.loading=!0;try{let e=await Ts(`/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}}},fS=class{#e=A(M([]));get data(){return L(this.#e)}set data(e){j(this.#e,e,!0)}#t=A(`tokens`);get mode(){return L(this.#t)}set mode(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(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 Ts(`/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(Ds(e))return;console.error(`Failed to fetch calendar data:`,e),this.data=[]}finally{this.#r===e&&(this.#r=null,this.loading=!1)}}},pS=new lS,mS=new uS,hS=new dS,gS=new fS,_S=(e,t=f,n=f,r=f,i=f)=>{var a=yS(),o=N(a),s=N(o,!0);E(o);var c=F(o,2),l=N(c),u=N(l),d=N(u,!0);E(u),He(),E(l);var p=F(l,4),m=N(p),h=N(m,!0);E(m),He(),E(p);var g=F(p,4),_=N(g,!0);E(g),E(c),E(a),I((e,n,r,i,a,o)=>{V(s,t()),G(l,`title`,e),V(d,n),G(p,`title`,r),V(h,i),G(g,`title`,a),V(_,o)},[()=>Sc(`Input tokens`,n()),()=>xc(n()),()=>Sc(`Output tokens`,r()),()=>xc(r()),()=>Sc(`Total tokens`,i()),()=>xc(i())]),B(e,a)},vS=(e,t=f,n=f,r=f,i=f,a=f,o=f)=>{var s=SS(),c=N(s),l=N(c,!0);E(c);var u=F(c,2),d=N(u,!0);E(u);var p=F(u,2),m=e=>{var t=bS(),n=N(t,!0);E(t),I(()=>{G(t,`aria-label`,o().title),G(t,`title`,o().title),V(n,a())}),R(`click`,t,function(...e){o().onclick?.apply(this,e)}),B(e,t)},h=e=>{var t=xS(),n=N(t,!0);E(t),I(()=>V(n,a())),B(e,t)};H(p,e=>{o()?e(m):e(h,-1)}),E(s),I(()=>{W(s,1,`card provider-status-flag ${t()??``} ${n()??``}`,`svelte-6tr9cf`),V(l,r()),V(d,i())}),B(e,s)},yS=z(`
        i + o =
        `),bS=z(``),xS=z(` `),SS=z(`
        `),CS=z(`
        Cache Hits
        `),wS=z(`
        Total Requests
        Estimated Cost
        Prompt Cache Rate
        `);function TS(e,t){D(t,!0);let n=k(()=>Yc.summary),r=k(()=>Yc.cacheOverview),i=k(()=>Yc.cacheAnalyticsEnabled()),a=k(()=>pS.status.summary);function o(){let e=document.getElementById(`provider-status-section`);e&&(e.scrollIntoView({behavior:`smooth`,block:`start`}),e.focus({preventScroll:!0}))}var s=wS(),c=N(s);{let e=k(()=>Cb(L(n)));_S(c,()=>`Tokens`,()=>L(n).total_input_tokens,()=>L(n).total_output_tokens,()=>L(e))}var l=F(c,2),u=F(N(l),2),d=N(u,!0);E(u),E(l);var f=F(l,2),p=e=>{var t=CS(),n=F(N(t),2),i=N(n,!0);E(n),E(t),I(e=>V(i,e),[()=>_c(L(r).summary.total_hits)]),B(e,t)};H(f,e=>{L(i)&&e(p)});var m=F(f,2),h=F(N(m),2),g=N(h,!0);E(h),E(m);var _=F(m,2),v=e=>{{let t=k(()=>Db(L(r)));_S(e,()=>`Local Cache`,()=>L(r).summary.total_input_tokens,()=>L(r).summary.total_output_tokens,()=>L(t))}};H(_,e=>{L(i)&&e(v)});var y=F(_,2),b=F(N(y),2),x=N(b);Hy(x,{build:()=>Hb(Rb(L(n)),Xy(`var(--token-prompt)`),Xy(`var(--bg-surface-hover)`))});var S=F(x,2),C=N(S,!0);E(S),E(b),E(y);var w=F(y,2),T=e=>{{let t=k(()=>$b(L(a))),n=k(()=>tx(L(a))),r=k(()=>rx(L(a))),i=k(()=>nx(L(a))?{title:`View providers overview`,onclick:o}:null);vS(e,()=>`provider-status-overview-card`,()=>L(t),()=>`Provider Status`,()=>L(n),()=>L(r),()=>L(i))}};H(w,e=>{L(a).total>0&&e(T)});var ee=F(w,2),te=e=>{{let t=k(()=>Kx(hS.servers)),n=k(()=>Gx(hS.servers)),r=k(()=>qx(hS.servers));vS(e,()=>`mcp-servers-flag`,()=>L(t),()=>`MCP Servers`,()=>L(n),()=>L(r),()=>({title:`View MCP servers`,onclick:()=>Xo.navigate(`mcp-servers`)}))}},ne=k(()=>Wx(hS.available,hS.servers));H(ee,e=>{L(ne)&&e(te)}),E(s),I((e,t,n,r,i)=>{G(u,`title`,e),V(d,t),V(g,n),G(b,`aria-label`,r),V(C,i)},[()=>Eb(L(n),L(r),L(i)),()=>_c(Tb(L(n),L(r),L(i))),()=>vc(L(n).total_cost),()=>`Prompt cache rate `+Bb(L(n)),()=>Bb(L(n))]),B(e,s),O()}Vr([`click`]);var ES=z(` `),DS=z(`
        `),OS=z(`No usage in the selected period yet`),kS=z(`
        `),AS=z(`

        Tokens

        Share of input tokens over the selected period
        `);function jS(e,t){D(t,!0);let n=k(()=>Yc.cacheAnalyticsEnabled()),r=k(()=>jb(Yc.summary,Yc.cacheOverview,L(n))),i=k(()=>Mb(Yc.summary,Yc.cacheOverview,L(n))),a=k(()=>Ab(Yc.summary,Yc.cacheOverview,L(n)));var o=AS(),s=F(N(o),2);let c;var l=N(s);U(l,17,()=>L(i),e=>e.key,(e,t)=>{var n=DS(),r=N(n),i=e=>{var n=ES(),r=N(n);E(n),I(()=>V(r,`${L(t).pct??``}%`)),B(e,n)};H(r,e=>{L(t).pct>=8&&e(i)}),E(n),I(e=>{Vi(n,`width: ${L(t).pct??``}%; background: var(${L(t).colorVar??``})`),G(n,`title`,e)},[()=>Nb(L(t))]),B(e,n)});var u=F(l,2),d=e=>{B(e,OS())};H(u,e=>{L(a)||e(d)}),E(s);var f=F(s,2);U(f,21,()=>L(r),e=>e.key,(e,t)=>{var n=kS(),r=N(n),i=F(r,2),a=N(i,!0);E(i);var o=F(i,2),s=N(o);E(o);var c=F(o,2),l=N(c,!0);E(c),E(n),I((e,i)=>{G(n,`title`,e),Vi(r,`background: var(${L(t).colorVar??``})`),V(a,L(t).label),V(s,`${L(t).pct??``}%`),V(l,i)},[()=>Nb(L(t)),()=>_c(L(t).tokens)]),B(e,n)}),E(f),E(o),I(e=>{c=W(s,1,`cache-meter-bar svelte-1yzecxj`,null,c,{"is-empty":!L(a)}),G(s,`aria-label`,e)},[()=>Pb(L(i))]),B(e,o),O()}var MS=z(``);function NS(e,t){let n=K(t,`size`,3,16),r=K(t,`label`,3,`Loading`),i=K(t,`class`,3,``);var a=MS();I(()=>{W(a,1,Pi([`spinner`,i()]),`svelte-b54l9o`),Vi(a,`--spinner-size: ${n()??``}px`),G(a,`aria-label`,r())}),B(e,a)}var PS=Yr(` `),FS=Yr(``);function IS(e,t){let n=K(t,`label`,3,`No data`);var r=FS(),i=F(N(r),9),a=e=>{var t=PS(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)};H(i,e=>{n()&&e(a)}),E(r),I(()=>{G(r,`role`,n()?`img`:void 0),G(r,`aria-label`,n()||void 0),G(r,`aria-hidden`,n()?void 0:`true`)}),B(e,r)}var LS=z(`
        `),RS=z(`

        `);function zS(e,t){D(t,!0);let n=[`daily`,`weekly`,`monthly`,`yearly`];function r(e){Uc.interval=e,t.onintervalchange?.()}function i(){let e=Yc.daily;if(e.length===0)return null;let t=Uc.rangeStart(),n=Uc.rangeEnd(),r=Lb(Ib(e,Uc.interval,t,n),Ib(Array.isArray(Yc.cacheOverview.daily)?Yc.cacheOverview.daily:[],Uc.interval,t,n));return Vb(qy(),r,{cacheEnabled:Yc.cacheAnalyticsEnabled(),resolve:Xy})}var a=RS(),o=N(a),s=N(o),c=N(s,!0);E(s);var l=F(s,2);{let e=k(()=>n.map(e=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1)})));Gy(l,{ariaLabel:`Usage chart interval`,get options(){return L(e)},get value(){return Uc.interval},onchange:r})}E(o);var u=F(o,2),d=N(u);Hy(d,{build:i});var f=F(d,2),p=e=>{var t=LS();NS(N(t),{size:24,label:`Loading usage`}),E(t),B(e,t)},m=e=>{var t=LS();IS(N(t),{}),E(t),B(e,t)};H(f,e=>{Yc.daily.length===0&&Yc.loading?e(p):Yc.daily.length===0&&!J.authError&&e(m,1)}),E(u),E(a),I(e=>V(c,e),[()=>Uc.chartTitle()]),B(e,a),O()}var BS=10,VS=.7;function HS(e,t){if(e<=0||t<=0)return 0;let n=(e/t)**+VS,r=Math.ceil(n*BS);return r<1?1:r>BS?BS:r}function US(){let e=[];for(let t=0;t<=BS;t++)e.push(t);return e}function WS(e,t,n){let r={};(e||[]).forEach(e=>{r[e.date]=e});let i=os(cs(n,-364)),a=i.getUTCDay();i.setUTCDate(i.getUTCDate()-a);let o=[];for(let e=new Date(i);ss(e)<=n;e.setUTCDate(e.getUTCDate()+1)){let n=ss(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 GS(e){let t=os(cs(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);ss(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),ss(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 `),YS=z(`
        `),XS=z(`
        `),ZS=z(`
        `),QS=z(`
        `),$S=z(`

        Activity

        Mon Wed Fri
        `,1);function eC(e,t){D(t,!0);let n=A(M({show:!1,x:0,y:0,text:``})),r=k(()=>ys.currentDateKey()),i=k(()=>WS(gS.data,gS.mode,L(r))),a=k(()=>GS(L(r)));function o(e,t){t.empty||j(n,{show:!0,x:e.clientX,y:e.clientY,text:qS(t,gS.mode)},!0)}function s(){j(n,{show:!1,x:0,y:0,text:``},!0)}var c=$S(),l=P(c),u=N(l),d=F(N(u),2),f=e=>{NS(e,{size:14,label:`Loading activity`})};H(d,e=>{gS.loading&&gS.data.length===0&&e(f)}),Gy(F(d,2),{ariaLabel:`Activity calendar mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return gS.mode},onchange:e=>gS.mode=e}),E(u);var p=F(u,2),m=F(N(p),2),h=N(m);U(h,21,()=>L(a),e=>e.key,(e,t)=>{var n=JS(),r=N(n,!0);E(n),I(()=>{Vi(n,`grid-column: ${L(t).col+1} / span ${L(t).span??``}`),V(r,L(t).label)}),B(e,n)}),E(h);var g=F(h,2);U(g,21,()=>L(i),ai,(e,t,n)=>{var r=XS();U(r,23,()=>L(t),(e,t)=>n+`-`+t,(e,t)=>{var n=YS();I(()=>W(n,1,Pi([`contribution-calendar-cell`,L(t).empty?`empty`:`level-${L(t).level}`]),`svelte-3hfxuq`)),Br(`mouseenter`,n,e=>o(e,L(t))),Br(`mouseleave`,n,s),B(e,n)}),E(r),B(e,r)}),E(g),E(m),E(p);var _=F(p,2),v=N(_),y=N(v),b=N(y,!0);E(y),E(v);var x=F(v,2);U(F(N(x),2),16,US,e=>e,(e,t)=>{var n=ZS();I(()=>W(n,1,`contribution-calendar-cell level-${t??``}`,`svelte-3hfxuq`)),B(e,n)}),He(2),E(x),E(_),E(l);var S=F(l,2),C=e=>{var t=QS(),r=N(t,!0);E(t),I(()=>{Vi(t,`left: ${L(n).x??``}px; top: ${L(n).y-40}px`),V(r,L(n).text)}),B(e,t)};H(S,e=>{L(n).show&&e(C)}),I(e=>V(b,e),[()=>KS(gS.data,gS.mode)]),B(e,c),O()}var tC=z(``),nC=z(`

        `),rC=z(`
        `);function iC(e,t){D(t,!0);let n=K(t,`label`,3,`help`),r=K(t,`text`,3,``),i=K(t,`open`,15,!1),a=K(t,`external`,3,!1),o=k(()=>!!r()||!!t.help||a());var s=rC(),c=N(s),l=N(c);hi(l,()=>t.title??f);var u=F(l,2),d=e=>{var r=tC();let a;I(()=>{a=W(r,1,`inline-help-toggle svelte-y40or3`,null,a,{"is-open":i()}),G(r,`aria-label`,(i()?`Hide `:`Show `)+n()),G(r,`aria-expanded`,i()),G(r,`aria-controls`,t.copyId)}),R(`click`,r,()=>i(!i())),B(e,r)};H(u,e=>{L(o)&&e(d)}),hi(F(u,2),()=>t.extra??f),E(c);var p=F(c,2),m=e=>{var n=nC(),i=N(n),a=e=>{var n=Zr();hi(P(n),()=>t.help),B(e,n)},o=e=>{var t=Xr();I(()=>V(t,r())),B(e,t)};H(i,e=>{t.help?e(a):e(o,-1)}),E(n),I(()=>G(n,`id`,t.copyId)),B(e,n)};H(p,e=>{i()&&L(o)&&!a()&&e(m)}),E(s),B(e,s),O()}Vr([`click`]);var aC=z(`

        Provider Latency

        `),oC=z(`
        Avg
        `),sC=z(`

        Requests by Status

        Success 2xx 4xx 5xx
        `,1);function cC(e,t){D(t,!0);let n=sS(),r=k(()=>mS.stats);function i(){return{interval:L(r).interval,zone:ys.effectiveTimezone(),resolve:Xy,formatTimestamp:e=>ys.formatTimestamp(e)}}var a=Zr(),o=P(a),s=e=>{var t=sC(),a=P(t),o=N(a),s=F(N(o),2),c=N(s),l=F(N(c),2),u=N(l,!0);E(l),E(c);var d=F(c,2),f=F(N(d),4),p=N(f,!0);E(f),E(d);var m=F(d,2),h=F(N(m),4),g=N(h,!0);E(h),E(m);var _=F(m,2),v=F(N(_),4),y=N(v,!0);E(v),E(_),E(s),E(o);var b=F(o,2);Hy(N(b),{build:()=>oS(qy(),L(r).buckets,i())}),E(b),E(a);var x=F(a,2),S=e=>{var t=oC(),a=N(t),o=N(a);iC(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=>{B(e,aC())},$$slots:{title:!0}});var s=F(o,2),c=N(s),l=F(N(c),2),u=N(l,!0);E(l),E(c),E(s),E(a);var d=F(a,2);Hy(N(d),{build:()=>cS(qy(),L(r).buckets,L(r).provider_latency,{...i(),providerColor:n})}),E(d),E(t),I(e=>V(u,e),[()=>tS(L(r))]),B(e,t)},C=k(()=>Zx(L(r)));H(x,e=>{L(C)&&e(S)}),I((e,t,n,r)=>{V(u,e),V(p,t),V(g,n),V(y,r)},[()=>Qx(L(r)),()=>_c($x(L(r),`status_2xx`)),()=>_c($x(L(r),`status_4xx`)),()=>_c($x(L(r),`status_5xx`))]),B(e,t)},c=k(()=>Xx(L(r)));H(o,e=>{L(c)&&e(s)}),B(e,a),O()}var lC=(e,t=f,n=f,r)=>{let i=Dt(()=>h(r?.(),!1));var a=fC(),o=N(a),s=N(o,!0);E(o);var c=F(o,2),l=e=>{var t=uC(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)},u=e=>{var t=dC(),r=N(t,!0);E(t),I(()=>V(r,n())),B(e,t)};H(c,e=>{L(i)?e(l):e(u,-1)}),E(a),I(()=>V(s,t())),B(e,a)},uC=z(` `),dC=z(` `),fC=z(`
        `),pC=z(`

        `),mC=z(`
        Breaker State
        `),hC=z(`
        `),gC=z(`
        Models (Recent Traffic)
        `),_C=z(`
        `),vC=z(`

        `);function yC(e,t){D(t,!0);let n=k(()=>_x(t.provider)),r=k(()=>[[`Base URL`,t.provider.config?.base_url],[`API Version`,t.provider.config?.api_version]].filter(([,e])=>!!e));var i=vC();let a;var o=N(i),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=e=>{var n=pC(),r=N(n,!0);E(n),I(()=>V(r,t.provider.last_error)),B(e,n)};H(l,e=>{t.provider.last_error&&e(u)});var d=F(l,2),f=e=>{var r=_C(),i=N(r);{let e=k(()=>vx(t.provider));lC(i,()=>`Recent Requests`,()=>L(e))}var a=F(i,2),o=e=>{var r=mC(),i=F(N(r),2),a=N(i),o=N(a,!0);E(a),E(i),E(r),I(e=>{W(a,1,Pi([`provider-status-health-state`,L(n)]),`svelte-6y9wjv`),V(o,e)},[()=>gx(t.provider)]),B(e,r)},s=k(()=>hx(t.provider));H(a,e=>{L(s)&&e(o)});var c=F(a,2),l=e=>{var n=gC(),r=F(N(n),2);U(r,21,()=>yx(t.provider),e=>e.model,(e,t)=>{var n=hC();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(n),I((e,i)=>{r=W(n,1,`provider-status-health-model svelte-6y9wjv`,null,r,{"is-flagged":L(t).flagged}),G(n,`title`,e),V(a,L(t).model),V(s,i)},[()=>xx(L(t)),()=>bx(L(t))]),B(e,n)}),E(r),E(n),B(e,n)},u=k(()=>yx(t.provider).length>0);H(c,e=>{L(u)&&e(l)}),E(r),B(e,r)},p=k(()=>mx(t.provider));H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=N(m);U(h,17,()=>L(r),([e,t])=>e,(e,t)=>{var n=k(()=>g(L(t),2));lC(e,()=>L(n)[0],()=>L(n)[1],()=>!0)});var _=F(h,2);{let e=k(()=>fx(t.provider));lC(_,()=>`Configured Models`,()=>L(e))}var v=F(_,2);{let e=k(()=>ux(t.provider));lC(v,()=>`Retry`,()=>L(e))}var y=F(v,2);{let e=k(()=>dx(t.provider));lC(y,()=>`Circuit Breaker`,()=>L(e))}E(m),E(o),E(i),I(()=>{a=W(i,1,`provider-status-details svelte-6y9wjv`,null,a,{"is-expanded":t.expanded,"is-collapsed":!t.expanded}),G(i,`aria-hidden`,!t.expanded),V(c,t.provider.status_reason)}),B(e,i),O()}var bC=z(` `),xC=z(``),SC=z(`

        Models Available
        Last Checked
        `);function CC(e,t){D(t,!0);let n=k(()=>pS.cardExpanded(t.provider)),r=e=>ys.formatTimestamp(e);var i=SC(),a=N(i),o=N(a),s=N(o),c=N(s),l=N(c,!0);E(c);var u=F(c,2),d=e=>{var n=bC(),r=N(n);E(n),I(e=>V(r,`(${e??``})`),[()=>cx(t.provider)]),B(e,n)},f=k(()=>cx(t.provider));H(u,e=>{L(f)&&e(d)});var p=F(u,2),m=e=>{var n=xC();I((e,t,r)=>{G(n,`href`,e),G(n,`aria-label`,t),G(n,`title`,r)},[()=>lx(t.provider),()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`,()=>`View `+(cx(t.provider)||t.provider.name)+` provider docs`]),B(e,n)},h=k(()=>lx(t.provider));H(p,e=>{L(h)&&e(m)}),E(s),E(o);var g=F(o,2),_=N(g,!0);E(g),E(a);var v=F(a,2),y=N(v),b=F(N(y),2),x=N(b,!0);E(b),E(y);var S=F(y,2),C=F(N(S),2),w=N(C,!0);E(C),E(S),E(v);var T=F(v,2);yC(T,{get provider(){return t.provider},get expanded(){return L(n)}});var ee=F(T,2);let te;q(N(ee),{get icon(){return Ha},class:`provider-status-card-toggle-icon`}),E(ee),E(i),I((e,r,i,a,o)=>{V(l,t.provider.name),W(g,1,`provider-status-pill ${e??``}`,`svelte-nopjmh`),G(g,`title`,r),V(_,t.provider.status_label),V(x,i),G(C,`title`,a),V(w,o),te=W(ee,1,`provider-status-card-toggle svelte-nopjmh`,null,te,{"is-expanded":L(n)}),G(ee,`aria-expanded`,L(n)),G(ee,`aria-label`,(L(n)?`Collapse `:`Expand `)+t.provider.name+` details`),G(ee,`title`,L(n)?`Collapse details`:`Expand details`)},[()=>ex(t.provider.status),()=>px(t.provider),()=>_c(t.provider.runtime?.discovered_model_count),()=>sx(t.provider,r),()=>ox(t.provider,r)]),R(`click`,ee,()=>pS.toggleCard(t.provider)),B(e,i),O()}Vr([`click`]);var wC=z(`

        Providers Overview

        `),TC=z(`
        `);function EC(e,t){D(t,!0);let n=k(()=>pS.status.providers);var r=Zr(),i=P(r),a=e=>{var t=wC(),r=N(t),i=F(N(r),2),a=N(i),o=N(a,!0);E(a);var s=F(a,2);let c;E(i),E(r);var l=F(r,2);U(l,21,()=>L(n),e=>e.name,(e,t)=>{CC(e,{get provider(){return L(t)}})}),E(l),E(t),I((e,t)=>{G(i,`aria-checked`,pS.detailsExpanded),G(i,`title`,e),V(o,t),c=W(s,1,`provider-status-toggle-track svelte-1kx3uw4`,null,c,{"is-active":pS.detailsExpanded})},[()=>pS.detailsToggleLabel(),()=>pS.detailsToggleLabel()]),R(`click`,i,()=>pS.toggleDetails()),B(e,t)},o=e=>{var t=TC();NS(N(t),{size:18,label:`Loading provider status`}),E(t),B(e,t)};H(i,e=>{L(n).length>0?e(a):pS.loading&&!pS.loadedOnce&&e(o,1)}),B(e,r),O()}Vr([`click`]);var DC=z(`
        `);function OC(e,t){D(t,!0);function n(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch(),pS.fetch(),hS.fetch(),gS.fetch()}function r(){Yc.fetchUsage(),Yc.fetchCacheOverview(``),mS.fetch()}function i(){r(),gS.fetch()}kn(()=>{if(J.refreshTick,Xo.page===`overview`)return Tr(()=>{n(),vb.start()}),()=>{vb.stop(),pS.stopPolling()}});var a=DC(),o=N(a);Sb(o,{});var s=F(o,4);fl(N(s),{onchange:i}),E(s);var c=F(s,2);Kc(c,{});var l=F(c,2);TS(l,{});var u=F(l,2);jS(u,{});var d=F(u,2);zS(d,{onintervalchange:r});var f=F(d,2);eC(f,{});var p=F(f,2);cC(p,{}),EC(F(p,2),{}),E(a),B(e,a),O()}var kC=`/admin/live/logs?types=audit,usage`;function AC(e,t,n){return!!t&&String(e&&e.id||``).trim()===t||!!n&&String(e&&e.request_id||``).trim()===n}function jC(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 MC(e){let t=kC,n=Number(e||0);return Number.isFinite(n)&&n>0&&(t+=`&cursor=`+encodeURIComponent(String(n))),t}function NC(){return{async consumeLiveLogsBody(e){await tb(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=>AC(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.cacheMergedAuditRecord(e,t),e}let l=this.mergeLiveAuditChild(e,c);if(l)return s||this.fetchExpandedAuditDetailIfReady(l),this.cacheMergedAuditRecord(l,t),l;if(!this.auditLiveInsertAllowed()){this.cacheMergedAuditRecord(c,t);return}if(!s&&this.auditGroupSessions){let e=this.foldLiveAuditIntoThread(c);if(e)return this.fetchExpandedAuditDetailIfReady(e),this.cacheMergedAuditRecord(e,t),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.cacheMergedAuditRecord(u,t),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;eAC(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=>!AC(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},cacheMergedAuditRecord(e,t){return e&&typeof this.cacheAuditRecord==`function`?this.cacheAuditRecord(e,t):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(!AC(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=>!AC(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 PC={"audit.started":10,"audit.updated":20,"audit.stream":20,"audit.completed":30,"audit.failed":40,"audit.flushed":40,"audit.detail":40},FC=new Set(Object.keys(PC));function IC(e){return String(e&&(e.id||e.request_id)||``).trim()}function LC(e,t){let n=e&&typeof e==`object`?e:{},r=t&&typeof t==`object`?t:{},i={...n,...r};r.data==null&&n.data!=null?i.data=n.data:BC(n.data)&&BC(r.data)&&(i.data={...n.data,...r.data});let a=String(n._live_state||``).trim(),o=String(r._live_state||``).trim();return(PC[a]||0)>(PC[o]||0)&&(i._live_state=a),n._audit_flushed&&(i._audit_flushed=!0),i._audit_flushed&&(i._live_pending=!1),n._detail_loaded&&!r._detail_loaded&&(i._detail_loaded=!0,i.bodies_omitted=!1),i.bodies_omitted&&BC(i.data)&&(i.data.request_body!==void 0||i.data.response_body!==void 0)&&(i.bodies_omitted=!1),i}function RC(e,t){let n=Number(t||0);return(Array.isArray(e)?e:[]).filter(e=>Number(e&&e.version||0)>n)}function zC(e){return FC.has(String(e&&e.eventType||``).trim())}function BC(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}var VC=200,HC=class{#e=A(M({entries:[],total:0,limit:25,offset:0}));get auditLog(){return L(this.#e)}set auditLog(e){j(this.#e,e,!0)}#t=A(M({entries:[],total:0,limit:50,offset:0}));get usageLog(){return L(this.#t)}set usageLog(e){j(this.#t,e,!0)}#n=A(M({}));get auditRecords(){return L(this.#n)}set auditRecords(e){j(this.#n,e,!0)}#r=A(M([]));get auditRecordChanges(){return L(this.#r)}set auditRecordChanges(e){j(this.#r,e,!0)}auditRecordVersion=0;auditRecordPins=new Set;#i=A(``);get auditSearch(){return L(this.#i)}set auditSearch(e){j(this.#i,e,!0)}#a=A(``);get auditMethod(){return L(this.#a)}set auditMethod(e){j(this.#a,e,!0)}#o=A(``);get auditStatusCode(){return L(this.#o)}set auditStatusCode(e){j(this.#o,e,!0)}#s=A(``);get auditStream(){return L(this.#s)}set auditStream(e){j(this.#s,e,!0)}#c=A(Ca(`gomodel_audit_group_sessions`,`true`)!==`false`);get auditGroupSessions(){return L(this.#c)}set auditGroupSessions(e){j(this.#c,e,!0)}#l=A(M({}));get auditThreadChildren(){return L(this.#l)}set auditThreadChildren(e){j(this.#l,e,!0)}#u=A(``);get usageLogSearch(){return L(this.#u)}set usageLogSearch(e){j(this.#u,e,!0)}#d=A(``);get usageFilterModel(){return L(this.#d)}set usageFilterModel(e){j(this.#d,e,!0)}#f=A(``);get usageFilterProvider(){return L(this.#f)}set usageFilterProvider(e){j(this.#f,e,!0)}#p=A(``);get usageFilterLabel(){return L(this.#p)}set usageFilterLabel(e){j(this.#p,e,!0)}#m=A(``);get usageFilterUserPath(){return L(this.#m)}set usageFilterUserPath(e){j(this.#m,e,!0)}#h=A(!1);get usageLogHideCached(){return L(this.#h)}set usageLogHideCached(e){j(this.#h,e,!0)}#g=A(!1);get liveLogsStreaming(){return L(this.#g)}set liveLogsStreaming(e){j(this.#g,e,!0)}liveLogsLastSeq=0;liveLogsReconnectAttempts=0;liveLogsReconnectTimer=null;liveLogsController=null;skippedLiveUsageByRequestId=null;fetchUsage=null;fetchAuditLog=null;isAuditEntryExpanded=null;noteLiveTokenUsage=null;upsertAuditRecord(e,t=``){let n=IC(e);if(!n)return e;let r=LC(this.auditRecords[n],e);return this.auditRecords={...this.auditRecords,[n]:r},this.pruneAuditRecords(),this.auditRecordVersion++,this.auditRecordChanges=[...this.auditRecordChanges,{version:this.auditRecordVersion,key:n,eventType:t}].slice(-512),r}upsertAuditRecords(e,t=``){return(Array.isArray(e)?e:[]).map(e=>this.upsertAuditRecord(e,t))}auditRecord(e){let t=typeof e==`string`?String(e).trim():IC(e);return t&&this.auditRecords[t]||null}cacheAuditRecord(e,t){return this.upsertAuditRecord(e,t)}pinAuditRecords(e){this.auditRecordPins=new Set((Array.isArray(e)?e:[]).map(String))}pruneAuditRecords(){let e=Object.keys(this.auditRecords);if(e.length<=VC)return;let t={...this.auditRecords},n=e.length-VC;for(let r of e){if(n<=0)break;this.auditRecordPins.has(r)||(delete t[r],n--)}this.auditRecords=t}get page(){return Xo.page}get customStartDate(){return Uc.customStartDate}get customEndDate(){return Uc.customEndDate}get followsToday(){return Uc.followsToday}liveLogsEnabled(){return As.liveLogsVisible()}async startLiveLogs(){typeof fetch!=`function`||typeof ReadableStream>`u`||(await As.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=MC(this.liveLogsLastSeq),r=J.generation;try{let i=await Cs(n,t);if(i.status===401){if(J.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 Ts(`/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(HC.prototype,NC());var UC=new HC;if(typeof window<`u`){let e=!1;window.addEventListener(`pagehide`,()=>{e=!!UC.liveLogsController,UC.stopLiveLogs()}),window.addEventListener(`pageshow`,t=>{t.persisted&&e&&UC.ensureLiveLogs()})}var WC=null;jn(()=>{kn(()=>{let e=J.refreshTick;if(WC===null){WC=e;return}e!==WC&&(WC=e,Tr(()=>{UC.stopLiveLogs(),UC.startLiveLogs()}))})});function GC(){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 KC(){return{entries:[],total:0,limit:50,offset:0}}function qC(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 JC({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 YC(e,t){let n=new Set(e||[]);return t&&n.add(t),[...n].sort()}function XC(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 ZC(e,t,n){let r=n?e:t,i=Number(r&&r.total_requests||0);return Number.isFinite(i)?i:0}function QC(e,t,n){let r=XC(e,t);return r<=0?``:n?_c(r)+` cached requests hidden`:_c(Number(e&&e.total_requests||0))+` to providers + `+_c(r)+` from cache`}function $C(e){let t=e||{};return t.total_input_cost===null||t.total_input_cost===void 0?``:vc(t.total_input_cost)+` input + `+vc(t.total_output_cost)+` output`}function ew(e){let t=Number(e&&e.rewrite_tokens_saved||0);return Number.isFinite(t)&&t>0?t:0}function tw(e){return ew(e)>0}function nw(e){let t=e||{};return t.rewrite_cost_saved===void 0?null:t.rewrite_cost_saved}function rw(){return`Estimated at 4 net characters removed per token`}function iw(e,t){return t===`costs`?vc(nw(e)):xc(ew(e))}function aw(e,t){let n=t===`costs`,r=n?Number(nw(e)):ew(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 ow(e,t){let n=aw(e,t);return n===null?``:(n<.1?`<0.1`:n.toFixed(1))+`% less`}function sw(e,t){let n=ew(e);if(n<=0)return``;let r=[_c(n)+` estimated prompt token-transmissions removed across provider requests`,rw(),`Savings are summed per provider request; resent conversation history is counted again`],i=nw(e);i!=null&&(r.push(vc(i)+` estimated gross input cost avoided`),r.push(`Prompt-cache changes caused by rewriting are not included`));let a=ow(e,t);return a&&r.push(a+` than the same traffic without rewriting (`+(t===`costs`?`cost`:`tokens`)+`)`),r.join(` +`)}function cw(e){return String(e&&e.cost_source||``).trim()}function lw(e){let t=cw(e);return t===`openrouter_credits`||t===`xai_cost_in_usd_ticks`}function uw(e){switch(cw(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 dw(e){return String(e&&e.cache_type||``).trim().toLowerCase()}function fw(e){let t=dw(e);return t===`exact`||t===`semantic`}function pw(e){let t=dw(e);return t===`exact`?`Exact`:t===`semantic`?`Semantic`:`-`}function mw(e,t){let n=t?String(t):``;return fw(e)?n?`Saved by cache — not charged +`+n:`Saved by cache — not charged`:n}function hw(e){let t=Number(e&&e.cached_input_ratio);return!Number.isFinite(t)||t<=0?0:Math.min(1,t)}function gw(e){return Number(e&&e.cached_input_tokens||0)>0}function _w(e){return gw(e)?(hw(e)*100).toFixed(1)+`%`:``}function vw(e){if(!gw(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=[_c(t)+` cached / `+_c(i)+` input tokens`];return r>0&&a.push(_c(r)+` cache write`),a.join(` +`)}function yw(e){let t=[];if(uw(e)&&(t.push(uw(e)),t.push(``)),t.push(`Input: `+vc(e.input_cost)),t.push(`Output: `+vc(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):_c(r);t.push(e+`: `+i)}}return t.join(` +`)}function bw(e){return Array.isArray(e&&e.labels)?e.labels:[]}function xw(e,t,n){return(e||[]).length>0||t?!0:(n||[]).some(e=>bw(e).length>0)}function Sw(e){return e&&typeof e.total_tokens==`number`?e.total_tokens:(e&&e.input_tokens||0)+(e&&e.output_tokens||0)}function Cw(e,t){return t?e.total_cost||0:Sw(e)}function ww(e,t){return[...e||[]].sort((e,n)=>t?(n.total_cost||0)-(e.total_cost||0):Cw(n,t)-Cw(e,t))}function Tw(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 Ew(e){return(e||`chart`)===`chart`||e===`stacked`}function Dw(e,t,n){let r=ww(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 Ow(e){return Math.max(200,e*32+72)}var kw=new class{#e=A(`tokens`);get usageMode(){return L(this.#e)}set usageMode(e){j(this.#e,e,!0)}get usageFilterModel(){return UC.usageFilterModel}set usageFilterModel(e){UC.usageFilterModel=e}get usageFilterProvider(){return UC.usageFilterProvider}set usageFilterProvider(e){UC.usageFilterProvider=e}get usageFilterLabel(){return UC.usageFilterLabel}set usageFilterLabel(e){UC.usageFilterLabel=e}get usageFilterUserPath(){return UC.usageFilterUserPath}set usageFilterUserPath(e){UC.usageFilterUserPath=e}#t=A(M({models:[],providers:[],labels:[]}));get usageFacetOptions(){return L(this.#t)}set usageFacetOptions(e){j(this.#t,e,!0)}#n=A(M(GC()));get usageSummary(){return L(this.#n)}set usageSummary(e){j(this.#n,e,!0)}#r=A(M(GC()));get usageSummaryAll(){return L(this.#r)}set usageSummaryAll(e){j(this.#r,e,!0)}#i=A(M([]));get modelUsage(){return L(this.#i)}set modelUsage(e){j(this.#i,e,!0)}#a=A(M([]));get userPathUsage(){return L(this.#a)}set userPathUsage(e){j(this.#a,e,!0)}#o=A(M([]));get labelUsage(){return L(this.#o)}set labelUsage(e){j(this.#o,e,!0)}get usageLog(){return UC.usageLog}set usageLog(e){UC.usageLog=e}get usageLogSearch(){return UC.usageLogSearch}set usageLogSearch(e){UC.usageLogSearch=e}get usageLogHideCached(){return UC.usageLogHideCached}set usageLogHideCached(e){UC.usageLogHideCached=e}#s=A(`chart`);get modelUsageView(){return L(this.#s)}set modelUsageView(e){j(this.#s,e,!0)}#c=A(`chart`);get userPathUsageView(){return L(this.#c)}set userPathUsageView(e){j(this.#c,e,!0)}#l=A(`chart`);get labelUsageView(){return L(this.#l)}set labelUsageView(e){j(this.#l,e,!0)}#u=A(!1);get summaryLoading(){return L(this.#u)}set summaryLoading(e){j(this.#u,e,!0)}#d=A(!1);get modelUsageLoading(){return L(this.#d)}set modelUsageLoading(e){j(this.#d,e,!0)}#f=A(!1);get userPathUsageLoading(){return L(this.#f)}set userPathUsageLoading(e){j(this.#f,e,!0)}#p=A(!1);get labelUsageLoading(){return L(this.#p)}set labelUsageLoading(e){j(this.#p,e,!0)}#m=A(!1);get usageLogLoading(){return L(this.#m)}set usageLogLoading(e){j(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 qC({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,Xo.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 YC(this.usageFacetOptions.models,this.usageFilterModel)}usageFilterProviderOptions(){return YC(this.usageFacetOptions.providers,this.usageFilterProvider)}usageFilterLabelOptions(){return YC(this.usageFacetOptions.labels,this.usageFilterLabel)}async fetchUsagePage(){await As.ensureLoaded();let e=[this.fetchUsagePageSummary(),this.fetchUsageFacetOptions(),this.fetchModelUsage(),this.fetchUserPathUsage(),this.fetchLabelUsage(),this.fetchUsageLog(!0)];Yc.cacheAnalyticsEnabled()&&e.push(Yc.fetchCacheOverview(this.filterQueryStr())),await Promise.all(e)}async fetchUsagePageSummary(){let e=this.#g(`summary`);this.summaryLoading=!0;try{let t=Uc.queryStr()+this.filterQueryStr(),[n,r]=await Promise.all([Ts(`/admin/usage/summary?`+t+`&cache_mode=uncached`,{label:`usage page summary`,signal:e.signal}),Ts(`/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=GC(),this.usageSummaryAll=GC();return}this.usageSummary=n.data&&typeof n.data==`object`?n.data:GC(),this.usageSummaryAll=r.data&&typeof r.data==`object`?r.data:GC()}catch(e){if(Ds(e))return;console.error(`Failed to fetch usage page summary:`,e),this.usageSummary=GC(),this.usageSummaryAll=GC()}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 Ts(t+`?`+Uc.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=>Dc(e)).filter(Boolean),labels:o.map(e=>e&&e.label).filter(Boolean)}}catch(e){if(Ds(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 Ts(t+`?`+Uc.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(Ds(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=Uc.queryStr()+this.filterQueryStr();n+=JC({limit:this.usageLog.limit,offset:this.usageLog.offset,hideCached:this.usageLogHideCached,search:this.usageLogSearch});let r=await Ts(`/admin/usage/log?`+n,{label:`usage log`,signal:t.signal});if(r.stale||t.signal.aborted)return;if(!r.ok){this.usageLog=KC();return}let i=r.data&&typeof r.data==`object`?r.data:KC();i.entries||=[],this.usageLog=i}catch(e){if(Ds(e))return;console.error(`Failed to fetch usage log:`,e),this.usageLog=KC()}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))}};UC.fetchUsage=()=>{Xo.page===`usage`&&kw.fetchUsagePage()};var Aw=z(`
        `);function jw(e,t){D(t,!0);let n=K(t,`value`,15,``),r=K(t,`placeholder`,3,``),i=K(t,`label`,3,``),a=K(t,`id`,3,void 0),o=K(t,`oninput`,3,void 0),s=K(t,`class`,3,``);var c=Aw(),l=N(c);q(l,{get icon(){return yo},class:`filter-input-icon`});var u=F(l,2);ta(u),E(c),I(()=>{W(c,1,Pi([`filter-input-wrap`,s()]),`svelte-30xz1k`),G(u,`id`,a()),G(u,`placeholder`,r()),G(u,`aria-label`,i())}),R(`input`,u,function(...e){o()?.apply(this,e)}),ua(u,n),B(e,c),O()}Vr([`input`]);function Mw(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 Nw=z(``),Pw=z(``),Fw=z(`
        `);function Iw(e,t){D(t,!0);let n=Mw(()=>kw.onUsageFilterChanged());kn(()=>n.cancel);var r=Fw(),i=N(r),a=N(i);a.value=a.__value=``,U(F(a),16,()=>kw.usageFilterModelOptions(),e=>e,(e,t)=>{var n=Nw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(i);var o=F(i,2),s=N(o);s.value=s.__value=``,U(F(s),16,()=>kw.usageFilterProviderOptions(),e=>e,(e,t)=>{var n=Nw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(o);var c=F(o,2),l=e=>{var t=Pw(),n=N(t);n.value=n.__value=``,U(F(n),16,()=>kw.usageFilterLabelOptions(),e=>e,(e,t)=>{var n=Nw(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(t),R(`change`,t,()=>kw.onUsageFilterChanged()),Wi(t,()=>kw.usageFilterLabel,e=>kw.usageFilterLabel=e),B(e,t)},u=k(()=>kw.usageFilterLabelOptions().length>0);H(c,e=>{L(u)&&e(l)}),jw(F(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 kw.usageFilterUserPath},set value(e){kw.usageFilterUserPath=e}}),E(r),R(`change`,i,()=>kw.onUsageFilterChanged()),Wi(i,()=>kw.usageFilterModel,e=>kw.usageFilterModel=e),R(`change`,o,()=>kw.onUsageFilterChanged()),Wi(o,()=>kw.usageFilterProvider,e=>kw.usageFilterProvider=e),B(e,r),O()}Vr([`change`]);var Lw=z(`
        Cache Saved
        Cache Hits
        `,1);function Rw(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=Lw(),n=P(t),r=F(N(n),2),i=N(r,!0);E(r),E(n);var a=F(n,2),o=F(N(a),2),s=N(o,!0);E(o),E(a),I((e,t)=>{V(i,e),V(s,t)},[()=>vc(Yc.cacheOverview.summary.total_saved_cost),()=>_c(Yc.cacheOverview.summary.total_hits)]),B(e,t)},a=k(()=>Yc.cacheAnalyticsEnabled());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}var zw=z(` `),Bw=z(`
        Pro Saved
        `),Vw=z(`
        Total Requests
        Estimated Cost
        `);function Hw(e,t){D(t,!0);let n=k(()=>tw(kw.usageSummary)),r=k(()=>iw(kw.usageSummary,kw.usageMode)),i=k(()=>ow(kw.usageSummary,kw.usageMode));var a=Vw(),o=N(a),s=F(N(o),2),c=N(s),l=e=>{NS(e,{size:18,label:`Loading usage summary`})},u=e=>{var t=Xr();I(e=>V(t,e),[()=>_c(ZC(kw.usageSummary,kw.usageSummaryAll,kw.usageLogHideCached))]),B(e,t)};H(c,e=>{kw.summaryLoading?e(l):e(u,-1)}),E(s),E(o);var d=F(o,2),f=F(N(d),2),p=N(f),m=e=>{NS(e,{size:18,label:`Loading usage summary`})},h=e=>{var t=Xr();I(e=>V(t,e),[()=>vc(kw.usageSummary.total_cost)]),B(e,t)};H(p,e=>{kw.summaryLoading?e(m):e(h,-1)}),E(f),E(d);var g=F(d,2),_=e=>{var t=Bw(),n=F(N(t),2),a=N(n),o=N(a,!0);E(a);var s=F(a,2),c=e=>{var t=zw(),n=N(t,!0);E(t),I(()=>V(n,L(i))),B(e,t)};H(s,e=>{L(i)&&e(c)}),E(n),E(t),I(e=>{G(n,`title`,e),V(o,L(r))},[()=>sw(kw.usageSummary,kw.usageMode)]),B(e,t)};H(g,e=>{L(n)&&e(_)}),Rw(F(g,2),{}),E(a),I((e,t)=>{G(s,`title`,e),G(f,`title`,t)},[()=>QC(kw.usageSummary,kw.usageSummaryAll,kw.usageLogHideCached),()=>$C(kw.usageSummary)]),B(e,a),O()}function Uw(e,t,n,r){let{stacked:i=!1,costs:a=!1,resolve:o=e=>e}=r||{},s=e=>a?`$`+Math.abs(e).toFixed(2):xc(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:Jy(),callback:e=>s(e)}},y:{stacked:!0,grid:{display:!1},border:{display:!1},ticks:{color:e.text,font:Jy(),autoSkip:!1}}},plugins:{legend:{labels:{color:e.text,font:{size:12}}},tooltip:Yy(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 Ww=z(`
        `),Gw=z(`

        `),Kw=z(`

        `,1),qw=z(`
        `),Jw=z(`Model Provider`,1),Yw=z(`User Path`),Xw=z(`Label Requests`,1),Zw=z(` `,1),Qw=z(` `),$w=z(` `,1),eT=z(` `),tT=z(`
        Input TokensOutput TokensPrompt CachedLocal CachedTotal TokensInput CostOutput CostTotal Cost
        `),nT=z(`
        `),rT=z(`
        `);function iT(e,t){D(t,!0);let n=e=>{var n=Ww(),r=N(n);let a;var o=F(r,2);let s;var l=F(o,2);let u;E(n),I(()=>{G(n,`aria-label`,L(i).group),a=W(r,1,`chart-view-btn svelte-1kee4g8`,null,a,{active:L(c)===`chart`}),G(r,`aria-pressed`,L(c)===`chart`),G(r,`aria-label`,`Show ${L(i).noun??``} chart`),s=W(o,1,`chart-view-btn svelte-1kee4g8`,null,s,{active:L(c)===`stacked`}),G(o,`aria-pressed`,L(c)===`stacked`),G(o,`aria-label`,`Show ${L(i).noun??``} stacked chart`),u=W(l,1,`chart-view-btn svelte-1kee4g8`,null,u,{active:L(c)===`table`}),G(l,`aria-pressed`,L(c)===`table`),G(l,`aria-label`,`Show ${L(i).noun??``} table`)}),R(`click`,r,()=>kw.toggleUsageChartView(t.kind,`chart`)),R(`click`,o,()=>kw.toggleUsageChartView(t.kind,`stacked`)),R(`click`,l,()=>kw.toggleUsageChartView(t.kind,`table`)),B(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=k(()=>r[t.kind]),a=k(()=>t.kind===`model`?e=>kc(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=k(()=>t.kind===`model`?kw.modelUsage:t.kind===`userPath`?kw.userPathUsage:kw.labelUsage),c=k(()=>t.kind===`model`?kw.modelUsageView:t.kind===`userPath`?kw.userPathUsageView:kw.labelUsageView),l=k(()=>t.kind===`model`?kw.modelUsageLoading:t.kind===`userPath`?kw.userPathUsageLoading:kw.labelUsageLoading),u=k(()=>kw.usageMode===`costs`),d=k(()=>t.kind===`userPath`?Tw(L(s)):L(s).length>0),f=k(()=>L(u)?L(i).costsTitle:L(i).tokensTitle),p=k(()=>Dw(L(s),L(a),L(u))),m=k(()=>ww(L(s),L(u)));function h(){return Ew(L(c))?Uw(qy(),L(p).labels,L(p),{stacked:L(c)===`stacked`,costs:L(u),resolve:Xy}):null}var g=Zr(),_=P(g),v=e=>{var r=nT(),a=N(r),s=N(a),u=e=>{iC(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=Gw(),n=N(t,!0);E(t),I(()=>V(n,L(f))),B(e,t)},extra:e=>{var t=Zr(),n=P(t),r=e=>{NS(e,{size:14,get label(){return`Loading ${L(i).noun??``}`}})};H(n,e=>{L(l)&&e(r)}),B(e,t)},$$slots:{title:!0,extra:!0}})},d=e=>{var t=Kw(),n=P(t),r=N(n,!0);E(n);var a=F(n,2),o=e=>{NS(e,{size:14,get label(){return`Loading ${L(i).noun??``}`}})};H(a,e=>{L(l)&&e(o)}),I(()=>V(r,L(f))),B(e,t)};H(s,e=>{t.kind===`label`?e(u):e(d,-1)});var g=F(s,2);n(g),E(a);var _=F(a,2),v=e=>{var t=qw();let n;Hy(N(t),{build:h}),E(t),I(e=>n=Vi(t,``,n,e),[()=>({height:`${Ow(L(p).labels.length)??``}px`})]),B(e,t)},y=k(()=>Ew(L(c))),b=e=>{var n=tT(),r=N(n),i=N(r),a=N(i),s=N(a),c=e=>{var t=Jw();He(2),B(e,t)},l=e=>{B(e,Yw())},u=e=>{var t=Xw();He(2),B(e,t)};H(s,e=>{t.kind===`model`?e(c):t.kind===`userPath`?e(l,1):e(u,-1)}),He(8),E(a),E(i);var d=F(i);U(d,21,()=>L(m),e=>o(e),(e,n)=>{var r=eT(),i=N(r),a=e=>{var t=Zw(),r=P(t),i=N(r,!0);E(r);var a=F(r,2),o=N(a),s=N(o,!0);E(o),E(a),I(e=>{V(i,L(n).model||`-`),V(s,e)},[()=>Dc(L(n))||`-`]),B(e,t)},o=e=>{var t=Qw(),r=N(t,!0);E(t),I(()=>V(r,L(n).user_path||`/`)),B(e,t)},s=e=>{var t=$w(),r=P(t),i=N(r);let a;var o=N(i,!0);E(i),E(r);var s=F(r,2),c=N(s,!0);E(s),I((e,t,r)=>{a=W(i,1,`usage-label-chip`,null,a,{active:kw.usageFilterLabel===L(n).label}),Vi(i,`--label-color: ${e??``}`),G(i,`title`,t),V(o,L(n).label),V(c,r)},[()=>$y(L(n).label),()=>kw.usageLabelChipTitle(L(n).label),()=>_c(L(n).requests)]),R(`click`,i,()=>kw.toggleUsageLabelFilter(L(n).label)),B(e,t)};H(i,e=>{t.kind===`model`?e(a):t.kind===`userPath`?e(o,1):e(s,-1)});var c=F(i),l=N(c,!0);E(c);var u=F(c),d=N(u,!0);E(u);var f=F(u),p=N(f,!0);E(f);var m=F(f),h=N(m,!0);E(m);var g=F(m),_=N(g,!0);E(g);var v=F(g),y=N(v,!0);E(v);var b=F(v),x=N(b,!0);E(b);var S=F(b),C=N(S,!0);E(S),E(r),I((e,t,n,r,i,a,o,s,c,u,g)=>{V(l,e),V(d,t),G(f,`title`,n),V(p,r),G(m,`title`,`${i??``} input + ${a??``} output`),V(h,o),V(_,s),V(y,c),V(x,u),V(C,g)},[()=>_c(L(n).input_tokens),()=>_c(L(n).output_tokens),()=>L(n).cached_input_cost==null?``:`~`+vc(L(n).cached_input_cost)+` at current cached-input pricing`,()=>_c(L(n).cached_input_tokens||0),()=>_c(L(n).local_cached_input_tokens||0),()=>_c(L(n).local_cached_output_tokens||0),()=>_c((L(n).local_cached_input_tokens||0)+(L(n).local_cached_output_tokens||0)),()=>_c(Sw(L(n))),()=>vc(L(n).input_cost),()=>vc(L(n).output_cost),()=>vc(L(n).total_cost)]),B(e,r)}),E(d),E(r),E(n),B(e,n)};H(_,e=>{L(y)?e(v):e(b,-1)}),E(r),B(e,r)},y=e=>{var t=rT();NS(N(t),{size:20,get label(){return`Loading ${L(i).noun??``}`}}),E(t),B(e,t)};H(_,e=>{L(d)?e(v):L(l)&&e(y,1)}),B(e,g),O()}Vr([`click`]);var aT=z(``);function oT(e,t){D(t,!0);let n=K(t,`total`,3,0),r=K(t,`offset`,3,0),i=K(t,`limit`,3,25);var a=Zr(),o=P(a),s=e=>{var a=aT(),o=N(a),s=N(o);E(o);var c=F(o,2),l=N(c),u=F(l,2);E(c),E(a),I(e=>{V(s,`Showing ${r()+1}-${e??``} of ${n()??``}`),l.disabled=r()===0,u.disabled=r()+i()>=n()},[()=>Math.min(r()+i(),n())]),R(`click`,l,()=>t.onprev?.()),R(`click`,u,()=>t.onnext?.()),B(e,a)};H(o,e=>{n()>0&&e(s)}),B(e,a),O()}Vr([`click`]);var sT=(e,t=f)=>{var n=Zr(),r=P(n),i=e=>{var n=lT();U(n,20,()=>bw(t()),e=>e,(e,t)=>{var n=cT();let r;var i=N(n,!0);E(n),I((e,a)=>{r=W(n,1,`usage-label-chip`,null,r,{active:kw.usageFilterLabel===t}),Vi(n,`--label-color: ${e??``}`),G(n,`title`,a),V(i,t)},[()=>$y(t),()=>kw.usageLabelChipTitle(t)]),R(`click`,n,()=>kw.toggleUsageLabelFilter(t)),B(e,n)}),E(n),B(e,n)},a=k(()=>bw(t()).length>0),o=e=>{B(e,uT())};H(r,e=>{L(a)?e(i):e(o,-1)}),B(e,n)},cT=z(``),lT=z(`
        `),uT=z(`-`),dT=z(`Labels`),fT=z(`Cost`),pT=z(``),mT=z(` `),hT=z(``),gT=z(` `),_T=z(` `),vT=z(`
        TimestampProviderModelUser PathCacheProvider Cache
        `),yT=z(`
        `),bT=z(`
        `),xT=z(`

        Request Log

        `);function ST(e,t){D(t,!0);let n=k(()=>kw.usageMode===`costs`),r=k(()=>xw(kw.labelUsage,kw.usageFilterLabel,kw.usageLog.entries)),i=Mw(()=>kw.fetchUsageLog(!0));kn(()=>i.cancel);var a=xT(),o=F(N(a),2),s=N(o);jw(N(s),{placeholder:`Search by request ID, model, provider...`,label:`Search by request ID, model, provider`,get oninput(){return i},get value(){return kw.usageLogSearch},set value(e){kw.usageLogSearch=e}}),E(s);var c=F(s,2),l=N(c),u=N(l);ta(u),He(2),E(l),E(c),E(o);var d=F(o,2),f=e=>{var t=vT(),i=N(t),a=N(i),o=N(a),s=F(N(o),4),c=e=>{B(e,dT())};H(s,e=>{L(r)&&e(c)});var l=F(s,3),u=N(l,!0);E(l);var d=F(l),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=e=>{B(e,fT())};H(h,e=>{L(n)||e(g)}),E(o),E(a);var _=F(a);U(_,21,()=>kw.usageLog.entries,e=>e.id,(e,t)=>{var i=_T();let a;var o=N(i),s=N(o,!0);E(o);var c=F(o),l=N(c),u=N(l,!0);E(l),E(c);var d=F(c),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=e=>{var n=pT();sT(N(n),()=>L(t)),E(n),B(e,n)};H(h,e=>{L(r)&&e(g)});var _=F(h),v=N(_,!0);E(_);var y=F(_),b=N(y),x=e=>{var n=mT(),r=N(n,!0);E(n),I(e=>V(r,e),[()=>_w(L(t))]),B(e,n)},S=k(()=>gw(L(t))),C=e=>{B(e,uT())};H(b,e=>{L(S)?e(x):e(C,-1)}),E(y);var w=F(y),T=N(w,!0);E(w);var ee=F(w),te=N(ee,!0);E(ee);var ne=F(ee),re=N(ne),ie=N(re,!0);E(re);var ae=F(re,2),oe=e=>{{let n=k(()=>uw(L(t)));q(e,{get icon(){return qa},class:`cost-source-icon`,get title(){return L(n)}})}},se=k(()=>L(n)&&lw(L(t)));H(ae,e=>{L(se)&&e(oe)});var ce=F(ae,2),le=e=>{q(e,{get icon(){return Xa},class:`cache-savings-icon`})},ue=k(()=>L(n)&&fw(L(t)));H(ce,e=>{L(ue)&&e(le)});var de=F(ce,2),fe=e=>{var n=hT();I(()=>G(n,`title`,L(t).costs_calculation_caveat)),B(e,n)};H(de,e=>{L(n)&&L(t).costs_calculation_caveat&&e(fe)}),E(ne);var pe=F(ne),me=e=>{var n=gT(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{{let n=k(()=>uw(L(t)));q(e,{get icon(){return qa},class:`cost-source-icon`,get title(){return L(n)}})}},s=k(()=>lw(L(t)));H(a,e=>{L(s)&&e(o)});var c=F(a,2),l=e=>{q(e,{get icon(){return Xa},class:`cache-savings-icon`})},u=k(()=>fw(L(t)));H(c,e=>{L(u)&&e(l)});var d=F(c,2),f=e=>{var n=hT();I(()=>G(n,`title`,L(t).costs_calculation_caveat)),B(e,n)};H(d,e=>{L(t).costs_calculation_caveat&&e(f)}),E(n),I((e,t)=>{G(n,`title`,e),V(i,t)},[()=>mw(L(t),yw(L(t))),()=>vc(L(t).total_cost)]),B(e,n)};H(pe,e=>{L(n)||e(me)}),E(i),I((e,n,r,c,l,d,p,h,g,_,b,x,S)=>{a=W(i,1,`svelte-hg4ill`,null,a,e),G(o,`title`,n),V(s,r),V(u,c),V(f,L(t).model),V(m,L(t).user_path||`-`),V(v,l),G(y,`title`,d),G(w,`title`,p),V(T,h),G(ee,`title`,g),V(te,_),G(ne,`title`,b),G(re,`title`,x),V(ie,S)},[()=>({"usage-log-row-cached":fw(L(t))}),()=>Tc(L(t).timestamp),()=>ys.formatTimestamp(L(t).timestamp),()=>Dc(L(t))||`-`,()=>pw(L(t)),()=>vw(L(t)),()=>L(n)?_c(L(t).input_tokens)+` tokens`:``,()=>L(n)?vc(L(t).input_cost):_c(L(t).input_tokens),()=>L(n)?_c(L(t).output_tokens)+` tokens`:``,()=>L(n)?vc(L(t).output_cost):_c(L(t).output_tokens),()=>L(n)?mw(L(t),``):``,()=>L(n)?mw(L(t),_c(L(t).total_tokens)+` tokens +`+yw(L(t))):``,()=>L(n)?vc(L(t).total_cost):_c(L(t).total_tokens)]),B(e,i)}),E(_),E(i),E(t),I(()=>{V(u,L(n)?`Input Cost`:`Input`),V(f,L(n)?`Output Cost`:`Output`),V(m,L(n)?`Total Cost`:`Total`)}),B(e,t)},p=e=>{var t=yT();NS(N(t),{size:20,label:`Loading request log`}),E(t),B(e,t)},m=e=>{var t=bT();IS(N(t),{}),E(t),B(e,t)};H(d,e=>{kw.usageLog.entries.length>0?e(f):kw.usageLogLoading?e(p,1):e(m,-1)}),oT(F(d,2),{get total(){return kw.usageLog.total},get offset(){return kw.usageLog.offset},get limit(){return kw.usageLog.limit},onprev:()=>kw.usageLogPrevPage(),onnext:()=>kw.usageLogNextPage()}),E(a),R(`change`,u,()=>kw.fetchUsageLog(!0)),da(u,()=>kw.usageLogHideCached,e=>kw.usageLogHideCached=e),B(e,a),O()}Vr([`click`,`change`]);var CT=z(`
        `);function wT(e,t){D(t,!0);let n=`usage`;kn(()=>{J.refreshTick,Xo.page===n&&(kw.fetchUsagePage(),UC.ensureLiveLogs())}),kn(()=>{Xo.page===n&&(kw.usageMode=Xo.sub===`costs`?`costs`:`tokens`)});var r=CT(),i=F(N(r),2),a=N(i);Gy(a,{ariaLabel:`Usage mode`,options:[{value:`tokens`,label:`Tokens`},{value:`costs`,label:`Costs`}],get value(){return kw.usageMode},onchange:e=>kw.toggleUsageMode(e)}),fl(F(a,2),{onchange:()=>kw.fetchUsagePage()}),E(i);var o=F(i,2);Iw(o,{});var s=F(o,2);Hw(s,{});var c=F(s,2),l=N(c);iT(l,{kind:`model`});var u=F(l,2);iT(u,{kind:`userPath`}),iT(F(u,2),{kind:`label`}),E(c),ST(F(c,2),{}),E(r),B(e,r),O()}var TT=z(`
        `);function ET(e,t){let n=K(t,`label`,3,`Loading...`),r=K(t,`class`,3,``);var i=TT(),a=F(N(i),2),o=N(a,!0);E(a),E(i),I(()=>{W(i,1,Pi([`loading-state`,r()]),`svelte-hzxv1d`),V(o,n())}),B(e,i)}var DT=z(``);function OT(e,t){let n=K(t,`label`,3,``),r=K(t,`class`,3,``),i=K(t,`disabled`,3,!1);var a=DT();hi(N(a),()=>t.children??f),E(a),I(()=>{W(a,1,Pi([`table-action-btn`,r()])),G(a,`aria-label`,n()),G(a,`title`,n()),a.disabled=i()}),R(`click`,a,function(...e){t.onclick?.apply(this,e)}),B(e,a)}Vr([`click`]);async function kT(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 Ts(e,{...a||{},label:t})}catch(e){return Ds(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?``:bs(o.data,n),result:o}}async function AT(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 Es(e,t,n,{...s||{},label:r})}catch(e){return Ds(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.`:bs(c.data,i),result:c}}function jT(){return{scope:`user_path`,subject:`/`,period:`daily`,period_seconds:86400,amount:``,source:`manual`}}function MT(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 NT(){return[`user_path`,`label`].map(e=>({value:e,label:MT(e).label}))}function PT(e){return String(e&&e.scope||``).trim()||`user_path`}function FT(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function IT(e){return MT(PT(e)).chip}function LT(e){return PT(e)===`label`?`budget-label`:`budget-user-path`}function RT(e){return MT(String(e&&e.scope||``)).fieldLabel}function zT(e){return MT(String(e&&e.scope||``)).placeholder}function BT(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function VT(){return[{value:`hourly`,label:`Hourly`},{value:`daily`,label:`Daily`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`},{value:`custom`,label:`Custom seconds`}]}function HT(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 UT(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 WT(e){return PT(e)+`:`+FT(e)+`:`+String(e&&e.period_seconds||``)}function GT(e,t){if(!t||!Array.isArray(e))return null;let n=WT(t);return e.find(e=>WT(e)===n)||null}function KT(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 qT(e){if(KT(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 JT(e){return`/`+String(e||``).trimStart().replace(/^\/+/,``)}function YT(e){return Array.isArray(e)?e:e&&Array.isArray(e.budgets)?e.budgets:[]}function XT(e){let t=Number(e&&e.period_seconds||0);return[FT(e),IT(e),pE(e),UT(t),t?String(t)+`s`:``,t?String(t)+` seconds`:``].join(` `).toLowerCase()}var ZT={user_path:0,label:1};function QT(e,t){let n=Array.isArray(e)?e.slice():[],r=String(t||`subject`);return n.sort((e,t)=>{let n=(ZT[PT(e)]||0)-(ZT[PT(t)]||0),i=FT(e).localeCompare(FT(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 $T(e,t,n){let r=Array.isArray(e)?e:[],i=String(t||``).trim().toLowerCase();return QT(i?r.filter(e=>XT(e).includes(i)):r.slice(),n)}function eE(e){let t=e||{},n=PT(t),r=String(t.subject||``).trim();if(n===`user_path`){let e=KT(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=HT(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`?qT(r):r,period_seconds:Math.trunc(o),amount:i,source:String(t.source||`manual`).trim()||`manual`},error:``}}function tE(e){return{scope:PT(e),subject:FT(e),budget_key:{period_seconds:e.period_seconds},amount:e.amount}}function nE(e){return{scope:PT(e),subject:FT(e),budget_key:{period_seconds:e.period_seconds}}}function rE(e){return{scope:PT(e),subject:FT(e),period_seconds:e.period_seconds}}function iE(e){return vc(e)}function aE(e,t){let n=e||{},r=t||{};return`A budget for "`+((FT(n)||FT(r))+` `+pE({period_seconds:n.period_seconds||r.period_seconds,period_label:r.period_label}))+`" already exists. Saving will override the current `+iE(r.amount)+` limit with `+iE(n.amount)+`.`}function oE(e){let t=Number(e);return!Number.isFinite(t)||t<0?0:t}function sE(e,t){let n=oE(e);return Math.round((t?Math.min(n,1):n)*1e3)/10}function cE(e){return oE(e&&e.usage_ratio)}function lE(e){return sE(cE(e),!0)}function uE(e){return sE(e&&e.period_ratio,!0)}function dE(e){return sE(cE(e),!1).toFixed(1).replace(/\.0$/,``)+`%`}function fE(e){return uE(e).toFixed(1).replace(/\.0$/,``)+`%`}function pE(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 mE(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 hE(e){return mE(e).replace(`budget-period-label-`,`budget-bar-fill-period-`)}function gE(e){return mE(e).replace(`budget-period-label-`,`budget-bar-track-period-`)}function _E(e){switch(Number(e&&e.period_seconds||0)){case 3600:return Ja;case 86400:return Oo;case 604800:return La;case 2592e3:return Ra;default:return So}}function vE(e){let t=Math.max(0,Math.trunc(Number(e||0)));return t+` `+(t===1?`second`:`seconds`)}function yE(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 vE(t)}}function bE(e){return String(e&&e.source||``).trim()||`manual`}function xE(e){let t=bE(e).toLowerCase();return t===`manual`?`Created from the dashboard.`:t===`config`?`Loaded from configuration.`:`Budget source: `+t}function SE(e){let t=Number(e&&e.remaining);return Number.isFinite(t)?t<0?vc(Math.abs(t))+` over`:vc(t)+` remaining`:``}var X=new class{#e=A(M([]));get budgets(){return L(this.#e)}set budgets(e){j(this.#e,e,!0)}#t=A(!0);get budgetsAvailable(){return L(this.#t)}set budgetsAvailable(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get filter(){return L(this.#r)}set filter(e){j(this.#r,e,!0)}#i=A(`subject`);get sortBy(){return L(this.#i)}set sortBy(e){j(this.#i,e,!0)}#a=A(``);get error(){return L(this.#a)}set error(e){j(this.#a,e,!0)}#o=A(!1);get formOpen(){return L(this.#o)}set formOpen(e){j(this.#o,e,!0)}#s=A(!1);get formSubmitting(){return L(this.#s)}set formSubmitting(e){j(this.#s,e,!0)}#c=A(``);get formError(){return L(this.#c)}set formError(e){j(this.#c,e,!0)}#l=A(!1);get editing(){return L(this.#l)}set editing(e){j(this.#l,e,!0)}#u=A(M(jT()));get form(){return L(this.#u)}set form(e){j(this.#u,e,!0)}#d=A(!1);get overrideDialogOpen(){return L(this.#d)}set overrideDialogOpen(e){j(this.#d,e,!0)}#f=A(null);get overridePendingPayload(){return L(this.#f)}set overridePendingPayload(e){j(this.#f,e,!0)}#p=A(null);get overrideExistingBudget(){return L(this.#p)}set overrideExistingBudget(e){j(this.#p,e,!0)}#m=A(``);get resettingKey(){return L(this.#m)}set resettingKey(e){j(this.#m,e,!0)}#h=A(``);get deletingKey(){return L(this.#h)}set deletingKey(e){j(this.#h,e,!0)}#g=A(!1);get resetAllLoading(){return L(this.#g)}set resetAllLoading(e){j(this.#g,e,!0)}#_=null;managementEnabled(){return As.budgetsVisible()}filteredBudgets(){return $T(this.budgets,this.filter,this.sortBy)}async fetchBudgetsPage(){if(await As.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 kT(`/admin/budgets`,{label:`budgets`,errorFallback:`Unable to load budgets.`,normalize:YT});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:PT(e),subject:FT(e),period:UT(t),period_seconds:t,amount:String(e.amount||``),source:String(e.source||`manual`)}}else this.form=jT();this.formOpen=!0}syncPeriodSeconds(){let e=HT(String(this.form.period||``).trim());e>0&&(this.form.period_seconds=e)}setFormSubject(e){this.form.subject=this.form.scope===`label`?String(e??``):JT(e)}syncScope(){BT(this.form)}closeForm(){this.closeOverrideDialog(),this.formOpen=!1,this.formSubmitting=!1,this.formError=``,this.editing=!1,this.form=jT()}async submitForm(){if(this.formSubmitting)return;let{payload:e,error:t}=eE(this.form);if(!e){this.formError=t;return}if(!this.editing){let t=GT(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 AT(`/admin/budgets`,`PUT`,tE(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(),Y.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=WT(e);if(this.resettingKey===t)return;let n=FT(e)+` `+pE(e);if(!confirm(`Reset budget "`+n+`"?`))return;this.resettingKey=t;let r=await AT(`/admin/budgets/reset-one`,`POST`,rE(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,Y.error(r.error);return}if(r.status===`error`){Y.error(r.error);return}Y.success(`Budget reset.`),this.fetchBudgets()}}async deleteBudget(e){if(!e)return;let t=WT(e);if(this.deletingKey===t)return;let n=FT(e)+` `+pE(e);if(!confirm(`Delete budget "`+n+`"? This cannot be undone.`))return;this.deletingKey=t;let r=await AT(`/admin/budgets`,`DELETE`,nE(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,Y.error(r.error);return}if(r.status===`error`){Y.error(r.error);return}this.budgets=YT(r.result.data),Y.success(`Budget deleted.`)}}openResetDialog(){Ys.open({title:`Reset Budgets`,titleId:`budgetResetDialogTitle`,inputId:`budget-reset-confirmation`,requiredText:`reset`,confirmLabel:`Reset All Budgets`,icon:_o,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.resetAllBudgets()})}async resetAllBudgets(){if(this.resetAllLoading)return;this.resetAllLoading=!0;let e=await AT(`/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`){Ys.error=e.error;return}Ys.close(),Y.success(`Budgets reset.`),Xo.page===`budgets`&&this.fetchBudgets()}}},CE=z(` Edit`,1),wE=z(` `,1),TE=z(`
        Usage
        Period
        `),EE=z(`
        `);function DE(e,t){D(t,!0);let n=K(t,`budgets`,19,()=>[]);function r(e){if(!e)return``;let t=ys.formatTimestamp(e);return!t||t===`-`?``:t+` `+ys.effectiveTimeZoneLabel()}var i=EE();U(i,21,n,e=>WT(e),(e,t)=>{var n=TE(),i=N(n),a=N(i),o=N(a),s=N(o),c=e=>{q(e,{get icon(){return ko},class:`budget-scope-icon`})},l=k(()=>PT(L(t))===`label`);H(s,e=>{L(l)&&e(c)});var u=F(s);E(o);var d=F(o,2),f=N(d),p=N(f);{let e=k(()=>_E(L(t)));q(p,{get icon(){return L(e)},class:`budget-period-icon`})}var m=F(p,2),h=N(m,!0);E(m),E(f),E(d);var g=F(d,2),_=N(g),v=N(_),y=N(v,!0);E(v),E(_);var b=F(_,2),x=N(b);OT(x,{label:`Edit budget`,class:`budget-action-btn`,onclick:()=>X.openForm(L(t)),children:(e,t)=>{var n=CE();q(P(n),{get icon(){return fo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}});var S=F(x,2);{let e=k(()=>X.resettingKey===WT(L(t))?`Resetting budget`:`Reset budget`),n=k(()=>X.resettingKey===WT(L(t)));OT(S,{get label(){return L(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>X.resetBudget(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=wE(),i=P(r);q(i,{get icon(){return _o},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>X.resettingKey===WT(L(t))?`Resetting`:`Reset`]),B(e,r)},$$slots:{default:!0}})}var C=F(S,2);{let e=k(()=>X.deletingKey===WT(L(t))?`Deleting budget`:`Delete budget`),n=k(()=>X.deletingKey===WT(L(t)));OT(C,{get label(){return L(e)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>X.deleteBudget(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=wE(),i=P(r);q(i,{get icon(){return jo},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>X.deletingKey===WT(L(t))?`Deleting`:`Delete`]),B(e,r)},$$slots:{default:!0}})}E(b),E(g),E(a);var w=F(a,2),T=N(w),ee=N(T),te=F(N(ee),2),ne=N(te,!0);E(te),E(ee);var re=F(ee,2),ie=N(re);let ae;var oe=F(ie,2),se=N(oe),ce=N(se,!0);E(se);var le=F(se,2),ue=N(le,!0);E(le),E(oe);var de=F(oe,2),fe=N(de),pe=N(fe,!0);E(fe);var me=F(fe,2),he=N(me,!0);E(me),E(de),E(re),E(T);var ge=F(T,2),_e=N(ge),ve=F(N(_e),2),ye=N(ve,!0);E(ve),E(_e);var be=F(_e,2),xe=N(be),Se=F(xe,2),Ce=N(Se),we=N(Ce,!0);E(Ce);var Te=F(Ce,2),Ee=N(Te,!0);E(Te);var De=F(Te,2),Oe=N(De,!0);E(De),E(Se);var ke=F(Se,2),Ae=N(ke),je=N(Ae,!0);E(Ae);var Me=F(Ae,2),Ne=N(Me,!0);E(Me);var Pe=F(Me,2),Fe=N(Pe,!0);E(Pe),E(ke),E(be),E(ge),E(w),E(i),E(n),I((e,t,n,r,i,a,s,c,l,d,p,m,g,_,b,x,S,C,w,T,ee,te,oe,se,le,de,fe,me,ge,_e)=>{W(o,1,`budget-scope-value ${e??``}`,`svelte-1jm56wo`),Vi(o,t),G(o,`title`,n),V(u,` ${r??``}`),W(f,1,`budget-period-label ${i??``}`,`svelte-1jm56wo`),V(h,a),G(v,`title`,s),V(y,c),V(ne,l),G(re,`aria-valuenow`,d),G(re,`aria-label`,p),Vi(re,`--budget-progress: ${m??``}%`),ae=W(ie,1,`budget-bar-fill budget-bar-fill-usage`,null,ae,g),V(ce,_),V(ue,b),V(pe,x),V(he,S),V(ye,C),W(be,1,`budget-bar-track ${w??``}`,`svelte-1jm56wo`),G(be,`aria-valuenow`,T),Vi(be,`--budget-progress: ${ee??``}%`),W(xe,1,`budget-bar-fill budget-bar-fill-period ${te??``}`,`svelte-1jm56wo`),G(Ce,`title`,oe),V(we,se),V(Ee,le),G(De,`title`,de),V(Oe,fe),V(je,me),V(Ne,ge),V(Fe,_e)},[()=>LT(L(t)),()=>PT(L(t))===`label`?`--label-color: `+$y(FT(L(t))):void 0,()=>IT(L(t))+`: `+FT(L(t)),()=>FT(L(t)),()=>mE(L(t)),()=>pE(L(t)),()=>xE(L(t)),()=>bE(L(t)),()=>dE(L(t)),()=>lE(L(t)),()=>`Budget usage: `+vc(L(t).spent)+` of `+vc(L(t).amount)+`, `+SE(L(t)),()=>lE(L(t)),()=>({"budget-bar-fill-danger":cE(L(t))>=1}),()=>vc(L(t).spent)+` of `+vc(L(t).amount),()=>SE(L(t)),()=>vc(L(t).spent)+` of `+vc(L(t).amount),()=>SE(L(t)),()=>fE(L(t)),()=>gE(L(t)),()=>uE(L(t)),()=>uE(L(t)),()=>hE(L(t)),()=>r(L(t).period_start),()=>ys.formatTimestamp(L(t).period_start),()=>yE(L(t)),()=>r(L(t).period_end),()=>ys.formatTimestamp(L(t).period_end),()=>ys.formatTimestamp(L(t).period_start),()=>yE(L(t)),()=>ys.formatTimestamp(L(t).period_end)]),B(e,n)}),E(i),B(e,i),O()}var OE=z(`

        `,1),kE=z(``),AE=z(``),jE=z(`
        `);function ME(e,t){D(t,!0);let n=K(t,`open`,3,!1),r=K(t,`title`,3,``),i=K(t,`ariaLabel`,3,``),a=K(t,`error`,3,``),o=K(t,`submitting`,3,!1),s=K(t,`submitDisabled`,3,!1),c=K(t,`submitLabel`,3,`Save`),l=K(t,`submittingLabel`,3,`Saving...`),u=K(t,`submitIcon`,3,vo),d=K(t,`cancel`,3,!0),p=K(t,`dialogClass`,3,``),m=K(t,`novalidate`,3,!1),h=K(t,`canClose`,3,()=>!0);function g(){J.dialogOpen||h()()&&t.onclose?.()}Us(e,{get open(){return n()},variant:`editor`,onclose:g,children:(e,n)=>{var h=jE(),g=N(h),_=N(g),v=N(_),y=N(v),b=e=>{var n=Zr();hi(P(n),()=>t.header),B(e,n)},x=e=>{var n=OE(),i=P(n),a=N(i,!0);E(i);var o=F(i,2),s=e=>{var n=Zr();hi(P(n),()=>t.headerHint),B(e,n)};H(o,e=>{t.headerHint&&e(s)}),I(()=>V(a,r())),B(e,n)};H(y,e=>{t.header?e(b):e(x,-1)}),E(v);var S=F(v,2);{let e=k(()=>`Close `+(i()||r()).toLowerCase());zs(S,{get label(){return L(e)},onclick:()=>t.onclose?.()})}E(_);var C=F(_,2);hi(C,()=>t.children??f);var w=F(C,2),T=e=>{var t=kE(),n=N(t,!0);E(t),I(()=>V(n,a())),B(e,t)};H(w,e=>{a()&&e(T)});var ee=F(w,2),te=N(ee),ne=e=>{var n=AE();R(`click`,n,()=>t.onclose?.()),B(e,n)};H(te,e=>{d()&&e(ne)});var re=F(te,2),ie=e=>{var n=Zr();hi(P(n),()=>t.extraActions),B(e,n)};H(re,e=>{t.extraActions&&e(ie)});var ae=F(re,2),oe=N(ae);q(oe,{get icon(){return u()},class:`form-action-icon`});var se=F(oe,2),ce=N(se,!0);E(se),E(ae),E(ee),E(g),E(h),I(()=>{W(h,1,Pi([`model-editor`,p()])),G(h,`aria-label`,i()||r()),g.noValidate=m(),ae.disabled=o()||s(),V(ce,o()?l():c())}),Br(`submit`,g,e=>{e.preventDefault(),t.onsubmit?.()}),B(e,h)},$$slots:{default:!0}}),O()}Vr([`click`]);var NE=z(`
        `);function PE(e,t){let n=K(t,`label`,3,``);var r=NE(),i=N(r),a=N(i,!0);E(i),hi(F(i,2),()=>t.children??f),E(r),I(()=>{G(i,`for`,t.id),V(a,n())}),B(e,r)}var FE=z(``),IE=z(``),LE=z(``),RE=z(``),zE=z(``),BE=z(``),VE=z(`

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

        `),HE=z(`
        `,1),UE=z(``),WE=z(` `,1);function GE(e,t){D(t,!0);function n(e){X.setFormSubject(e.target.value),e.target.value=X.form.subject}var r=WE(),i=P(r);{let e=k(()=>X.editing?`Edit Budget`:`Create Budget`);ME(i,{get open(){return X.formOpen},get title(){return L(e)},ariaLabel:`Budget editor`,get error(){return X.formError},get submitting(){return X.formSubmitting},submitLabel:`Save Budget`,dialogClass:`budget-editor`,canClose:()=>!X.overrideDialogOpen,onclose:()=>X.closeForm(),onsubmit:()=>X.submitForm(),children:(e,t)=>{var r=HE(),i=P(r),a=N(i);PE(a,{id:`budget-scope`,label:`Scope`,children:(e,t)=>{var n=IE();U(n,21,NT,e=>e.value,(e,t)=>{var n=FE(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),I(()=>n.disabled=X.editing),R(`change`,n,()=>X.syncScope()),Wi(n,()=>X.form.scope,e=>X.form.scope=e),B(e,n)},$$slots:{default:!0}});var o=F(a,2);{let e=k(()=>RT(X.form));PE(o,{id:`budget-subject`,get label(){return L(e)},children:(e,t)=>{var r=LE();ta(r),I(e=>{G(r,`placeholder`,e),na(r,X.form.subject),r.disabled=X.editing,G(r,`data-modal-autofocus`,!X.editing||void 0)},[()=>zT(X.form)]),R(`input`,r,n),B(e,r)},$$slots:{default:!0}})}var s=F(o,2);PE(s,{id:`budget-period`,label:`Period`,children:(e,t)=>{var n=RE();U(n,21,VT,e=>e.value,(e,t)=>{var n=FE(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),I(()=>n.disabled=X.editing),R(`change`,n,()=>X.syncPeriodSeconds()),Wi(n,()=>X.form.period,e=>X.form.period=e),B(e,n)},$$slots:{default:!0}});var c=F(s,2),l=e=>{PE(e,{id:`budget-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=zE();ta(n),I(()=>n.disabled=X.editing),ua(n,()=>X.form.period_seconds,e=>X.form.period_seconds=e),B(e,n)},$$slots:{default:!0}})};H(c,e=>{X.form.period===`custom`&&e(l)}),PE(F(c,2),{id:`budget-amount`,label:`Amount`,children:(e,t)=>{var n=BE();ta(n),I(()=>G(n,`data-modal-autofocus`,X.editing||void 0)),ua(n,()=>X.form.amount,e=>X.form.amount=e),B(e,n)},$$slots:{default:!0}}),E(i);var u=F(i,2),d=e=>{B(e,VE())};H(u,e=>{X.editing&&e(d)}),B(e,r)},$$slots:{default:!0}})}Us(F(i,2),{get open(){return X.overrideDialogOpen},variant:`auth`,onclose:()=>X.closeOverrideDialog(),children:(e,t)=>{var n=UE(),r=N(n);zs(F(N(r),2),{label:`Close budget override dialog`,onclick:()=>X.closeOverrideDialog(),class:`auth-dialog-close`,iconClass:``}),E(r);var i=F(r,2),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=F(c,2),u=N(l);q(u,{get icon(){return vo},class:`form-action-icon`});var d=F(u,2),f=N(d,!0);E(d),E(l),E(s),E(i),E(n),I(e=>{V(o,e),l.disabled=X.formSubmitting,V(f,X.formSubmitting?`Saving...`:`Override Budget`)},[()=>aE(X.overridePendingPayload,X.overrideExistingBudget)]),Br(`submit`,i,e=>{e.preventDefault(),X.confirmOverride()}),R(`click`,c,()=>X.closeOverrideDialog()),B(e,n)},$$slots:{default:!0}}),B(e,r),O()}Vr([`change`,`input`,`click`]);var KE=z(`

        Budgets

        `),qE=z(``),JE=z(`
        Budget management is unavailable.
        `),YE=z(``),XE=z(`
        `),ZE=z(`

        No budgets configured yet.

        `),QE=z(`

        No budgets match your filter.

        `),$E=z(`
        `);function eD(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`budgets`&&X.fetchBudgetsPage()});let n=k(()=>X.filteredBudgets());var r=$E(),i=N(r),a=N(i);iC(N(a),{copyId:`budgets-help-copy`,label:`budgets help`,title:e=>{B(e,KE())},help:e=>{He(),B(e,Xr(`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}}),E(a);var o=F(a,2),s=N(o),c=e=>{var t=qE();q(N(t),{get icon(){return mo},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=X.formSubmitting),R(`click`,t,()=>X.openForm()),B(e,t)},l=k(()=>X.managementEnabled()&&X.budgetsAvailable&&!J.authError);H(s,e=>{L(l)&&e(c)}),E(o),E(i);var u=F(i,2);Kc(u,{});var d=F(u,2),f=e=>{B(e,JE())},p=k(()=>(!X.managementEnabled()||!X.budgetsAvailable)&&!J.authError);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{var t=YE(),n=N(t,!0);E(t),I(()=>V(n,X.error)),B(e,t)};H(m,e=>{X.error&&!J.authError&&e(h)});var g=F(m,2),_=e=>{ET(e,{label:`Loading budgets...`})};H(g,e=>{X.loading&&!J.authError&&e(_)});var v=F(g,2),y=e=>{var t=XE(),n=N(t);jw(N(n),{id:`budget-filter`,placeholder:`Filter by user path, label, or period...`,label:`Filter budgets by user path or period`,get value(){return X.filter},set value(e){X.filter=e}}),E(n);var r=F(n,2),i=F(N(r),2),a=N(i);a.value=a.__value=`subject`;var o=F(a);o.value=o.__value=`period`,E(i),E(r),E(t),Wi(i,()=>X.sortBy,e=>X.sortBy=e),B(e,t)};H(v,e=>{(X.budgets.length>0||X.filter)&&X.budgetsAvailable&&!J.authError&&!X.formOpen&&e(y)});var b=F(v,2);GE(b,{});var x=F(b,2),S=e=>{DE(e,{get budgets(){return L(n)}})};H(x,e=>{L(n).length>0&&X.budgetsAvailable&&!J.authError&&e(S)});var C=F(x,2),w=e=>{B(e,ZE())},T=k(()=>X.budgets.length===0&&!X.filter&&!X.loading&&!J.authError&&!X.error&&X.budgetsAvailable&&X.managementEnabled());H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{B(e,QE())},ne=k(()=>X.budgets.length>0&&L(n).length===0&&X.filter&&!X.loading&&!J.authError&&!X.error&&X.budgetsAvailable&&X.managementEnabled());H(ee,e=>{L(ne)&&e(te)}),E(r),B(e,r),O()}Vr([`click`]);function tD(){return{scope:`user_path`,subject:`/`,period:`minute`,period_seconds:60,max_requests:``,max_tokens:``,source:`manual`}}function nD(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 rD(){return[`user_path`,`provider`,`model`].map(e=>({value:e,label:nD(e).label}))}function iD(e){return String(e&&e.scope||``).trim()||`user_path`}function aD(e){return String(e&&e.subject||``).trim()||String(e&&e.user_path||``)}function oD(e){return nD(iD(e)).chip}function sD(e){return nD(String(e&&e.scope||``)).fieldLabel}function cD(e){return nD(String(e&&e.scope||``)).placeholder}function lD(e){e.subject=String(e&&e.scope||``)===`user_path`?`/`:``}function uD(){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 dD(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 fD(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 pD(e){let t=String(e&&e.period||``).trim(),n=dD(t);n>=0&&(e.period_seconds=n),t===`concurrent`&&(e.max_tokens=``)}function mD(e){return iD(e)+`:`+aD(e)+`:`+String(e&&e.period_seconds||`0`)}function hD(e){return Number(e&&e.period_seconds||0)===0}function gD(e){return String(e&&e.period_label||``).trim()||fD(Number(e&&e.period_seconds||0))}function _D(e){return String(e&&e.source||``)===`config`?`config`:`manual`}function vD(e){return String(e&&e.source||``)===`config`}function yD(e){let t=Number(e);return Number.isFinite(t)?t.toLocaleString():`0`}function bD(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 xD(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[iD(e)]||0)-(i[iD(t)]||0);if(n!==0)return n;let r=aD(e).localeCompare(aD(t));return r===0?Number(e.period_seconds||0)-Number(t.period_seconds||0):r}),n?r.filter(e=>{let t=aD(e).toLowerCase(),r=oD(e).toLowerCase(),i=gD(e).toLowerCase();return t.includes(n)||r.includes(n)||i.includes(n)}):r}function SD(e){return!e||!Array.isArray(e.rate_limits)?[]:e.rate_limits}function CD(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 wD(e,t){return e?CD(t.scope,t.subject,t.limit_key.period_seconds)!==CD(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:sD(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 ED(e,t,n){if(iD(e)!==`model`)return!1;let r=String(aD(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 DD(e,t){return iD(e)===`provider`&&String(aD(e)).toLowerCase()===String(t||``).trim().toLowerCase()}function OD(e){let t=e||{},n=String(t.model||``),r=String(t.provider||``);return!r||n.toLowerCase().startsWith(r+`/`)?n:r+`/`+n}function kD(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:OD(n),hint:``,items:r.filter(e=>ED(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=>DD(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=>iD(e)===`user_path`&&aD(e)===`/`)}),i}function AD(e){return hD(e)?bD(e.in_flight,e.max_requests):Math.max(bD(e.requests_used,e.max_requests),bD(e.tokens_used,e.max_tokens))}function jD(e){return`--rate-limit-pressure: `+AD(e)+`%`}function MD(e){let t=AD(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 ND(e){return(Array.isArray(e)?e:[]).some(e=>iD(e)===`user_path`&&aD(e)===`/`)}function PD(e,t,n){let r=Array.isArray(e)?e:[];return r.some(e=>ED(e,t,n))?`table-action-btn-active`:r.some(e=>DD(e,t))||ND(r)?`rate-limit-gauge-inherited`:``}function FD(e,t){let n=Array.isArray(e)?e:[];return n.some(e=>DD(e,t))?`table-action-btn-active`:ND(n)?`rate-limit-gauge-inherited`:``}function ID(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 LD(e){if(hD(e))return yD(e.in_flight)+` of `+yD(e.max_requests)+` in flight`;let t=[];return e.max_requests!==null&&e.max_requests!==void 0&&t.push(yD(e.requests_used)+`/`+yD(e.max_requests)+` req`),e.max_tokens!==null&&e.max_tokens!==void 0&&t.push(yD(e.tokens_used)+`/`+yD(e.max_tokens)+` tok`),t.join(` · `)}var Z=new class{#e=A(M([]));get rateLimits(){return L(this.#e)}set rateLimits(e){j(this.#e,e,!0)}#t=A(!0);get rateLimitsAvailable(){return L(this.#t)}set rateLimitsAvailable(e){j(this.#t,e,!0)}#n=A(!1);get rateLimitsLoading(){return L(this.#n)}set rateLimitsLoading(e){j(this.#n,e,!0)}rateLimitFetchPromise=null;#r=A(``);get rateLimitFilter(){return L(this.#r)}set rateLimitFilter(e){j(this.#r,e,!0)}#i=A(``);get rateLimitError(){return L(this.#i)}set rateLimitError(e){j(this.#i,e,!0)}#a=A(!1);get rateLimitFormOpen(){return L(this.#a)}set rateLimitFormOpen(e){j(this.#a,e,!0)}#o=A(!1);get rateLimitFormSubmitting(){return L(this.#o)}set rateLimitFormSubmitting(e){j(this.#o,e,!0)}#s=A(``);get rateLimitFormError(){return L(this.#s)}set rateLimitFormError(e){j(this.#s,e,!0)}#c=A(!1);get rateLimitEditing(){return L(this.#c)}set rateLimitEditing(e){j(this.#c,e,!0)}rateLimitEditingOriginal=null;rateLimitFormReturnToInspector=!1;#l=A(``);get rateLimitResettingKey(){return L(this.#l)}set rateLimitResettingKey(e){j(this.#l,e,!0)}#u=A(``);get rateLimitDeletingKey(){return L(this.#u)}set rateLimitDeletingKey(e){j(this.#u,e,!0)}#d=A(!1);get rateLimitInspectorOpen(){return L(this.#d)}set rateLimitInspectorOpen(e){j(this.#d,e,!0)}#f=A(M({kind:``,provider:``,model:``,title:``}));get rateLimitInspector(){return L(this.#f)}set rateLimitInspector(e){j(this.#f,e,!0)}#p=A(M(tD()));get rateLimitForm(){return L(this.#p)}set rateLimitForm(e){j(this.#p,e,!0)}rateLimitsEnabled(){return As.rateLimitsVisible()}defaultRateLimitForm(){return tD()}rateLimitScopeMeta(e){return nD(e)}rateLimitScopeOptions(){return rD()}rateLimitScope(e){return iD(e)}rateLimitSubject(e){return aD(e)}rateLimitScopeLabel(e){return oD(e)}rateLimitSubjectFieldLabel(){return sD(this.rateLimitForm)}rateLimitSubjectPlaceholder(){return cD(this.rateLimitForm)}syncRateLimitScope(){lD(this.rateLimitForm)}rateLimitPeriodOptions(){return uD()}rateLimitPeriodSeconds(e){return dD(e)}rateLimitPeriodFromSeconds(e){return fD(e)}syncRateLimitPeriodSeconds(){pD(this.rateLimitForm)}rateLimitKey(e){return mD(e)}rateLimitIsConcurrent(e){return hD(e)}rateLimitPeriodLabel(e){return gD(e)}rateLimitSourceLabel(e){return _D(e)}rateLimitIsReadOnly(e){return vD(e)}formatRateLimitNumber(e){return yD(e)}rateLimitUsagePercent(e,t){return bD(e,t)}filteredRateLimits(){return xD(this.rateLimits,this.rateLimitFilter)}normalizeRateLimitListPayload(e){return SD(e)}async fetchRateLimitsPage(){if(await As.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 kT(`/admin/rate-limits`,{label:`rate limits`,errorFallback:`Unable to load rate limits.`,normalize:SD});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:iD(e),subject:aD(e),period_seconds:t},this.rateLimitForm={scope:iD(e),subject:aD(e),period:fD(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=tD();this.rateLimitFormOpen=!0}closeRateLimitForm(){this.rateLimitFormOpen=!1,this.rateLimitFormSubmitting=!1,this.rateLimitFormError=``,this.rateLimitEditing=!1,this.rateLimitEditingOriginal=null,this.rateLimitForm=tD(),this.rateLimitFormReturnToInspector&&(this.rateLimitFormReturnToInspector=!1,this.rateLimitInspectorOpen=!0)}rateLimitNormalizedIdentity(e,t,n){return CD(e,t,n)}rateLimitIdentityMoved(e){return wD(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 AT(`/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=SD(t.result.data),n&&!await this.deleteMovedRateLimitOriginal(r))return;this.closeRateLimitForm(),Y.success(n?`Rate limit moved; live counters restarted.`:`Rate limit saved.`)}finally{this.rateLimitFormSubmitting=!1}}async deleteMovedRateLimitOriginal(e){let t=await AT(`/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=SD(t.result.data),!0):(this.rateLimitFormError=t.error,!1)}async deleteRateLimit(e){let t=mD(e);if(this.rateLimitDeletingKey===t)return;this.rateLimitDeletingKey=t;let n=await AT(`/admin/rate-limits`,`DELETE`,{scope:iD(e),subject:aD(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`){Y.error(n.error);return}this.rateLimits=SD(n.result.data),Y.success(`Rate limit deleted.`)}}async resetRateLimit(e){let t=mD(e);if(this.rateLimitResettingKey===t)return;this.rateLimitResettingKey=t;let n=await AT(`/admin/rate-limits/reset-one`,`POST`,{scope:iD(e),subject:aD(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`){Y.error(n.error);return}this.rateLimits=SD(n.result.data),Y.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 ED(e,t,n)}rateLimitRuleMatchesProvider(e,t){return DD(e,t)}rateLimitInspectorQualifiedModel(){return OD(this.rateLimitInspector)}rateLimitInspectorSections(){return kD(this.rateLimitInspector,this.rateLimits)}rateLimitPressurePercent(e){return AD(e)}rateLimitPressureStyle(e){return jD(e)}rateLimitPressureClass(e){return MD(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,()=>PD(r,n,t))}rateLimitGaugeClassForProvider(e){let t=String(e&&e.provider_name||``).trim().toLowerCase(),n=this.rateLimits;return this.rateLimitGaugeMemo(`provider:`+t,()=>FD(n,t))}hasGlobalRateLimits(){let e=this.rateLimits;return this.rateLimitGaugeMemo(`global`,()=>ND(e))}rateLimitGaugeTitle(e,t){return ID(e,t)}rateLimitInspectorSummary(e){return LD(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)}},RD=z(``),zD=z(``),BD=z(``),VD=z(``),HD=z(``),UD=z(``),WD=z(``),GD=z(`

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

        `),KD=z(`

        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 qD(e,t){D(t,!0);{let t=k(()=>Z.rateLimitEditing?`Edit Rate Limit`:`Create Rate Limit`);ME(e,{get open(){return Z.rateLimitFormOpen},get title(){return L(t)},ariaLabel:`Rate limit editor`,get error(){return Z.rateLimitFormError},get submitting(){return Z.rateLimitFormSubmitting},submitLabel:`Save Rate Limit`,dialogClass:`budget-editor`,novalidate:!0,onclose:()=>Z.closeRateLimitForm(),onsubmit:()=>Z.submitRateLimitForm(),children:(e,t)=>{var n=KD(),r=P(n),i=N(r);PE(i,{id:`rate-limit-scope`,label:`Scope`,children:(e,t)=>{var n=zD();U(n,21,()=>Z.rateLimitScopeOptions(),e=>e.value,(e,t)=>{var n=RD(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),R(`change`,n,()=>Z.syncRateLimitScope()),Wi(n,()=>Z.rateLimitForm.scope,e=>Z.rateLimitForm.scope=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2);{let e=k(()=>Z.rateLimitSubjectFieldLabel());PE(a,{id:`rate-limit-subject`,get label(){return L(e)},children:(e,t)=>{var n=BD();ta(n),I(e=>{G(n,`placeholder`,e),G(n,`data-modal-autofocus`,!Z.rateLimitEditing||void 0),na(n,Z.rateLimitForm.subject)},[()=>Z.rateLimitSubjectPlaceholder()]),R(`input`,n,e=>Z.setRateLimitFormSubject(e.currentTarget.value)),B(e,n)},$$slots:{default:!0}})}var o=F(a,2);PE(o,{id:`rate-limit-period`,label:`Period`,children:(e,t)=>{var n=VD();U(n,21,()=>Z.rateLimitPeriodOptions(),e=>e.value,(e,t)=>{var n=RD(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n),R(`change`,n,()=>Z.syncRateLimitPeriodSeconds()),Wi(n,()=>Z.rateLimitForm.period,e=>Z.rateLimitForm.period=e),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=e=>{PE(e,{id:`rate-limit-period-seconds`,label:`Period Seconds`,children:(e,t)=>{var n=HD();ta(n),ua(n,()=>Z.rateLimitForm.period_seconds,e=>Z.rateLimitForm.period_seconds=e),B(e,n)},$$slots:{default:!0}})};H(s,e=>{Z.rateLimitForm.period===`custom`&&e(c)});var l=F(s,2);{let e=k(()=>Z.rateLimitForm.period===`concurrent`?`Max In-Flight Requests`:`Max Requests`);PE(l,{id:`rate-limit-max-requests`,get label(){return L(e)},children:(e,t)=>{var n=UD();ta(n),I(()=>G(n,`data-modal-autofocus`,Z.rateLimitEditing?!0:void 0)),ua(n,()=>Z.rateLimitForm.max_requests,e=>Z.rateLimitForm.max_requests=e),B(e,n)},$$slots:{default:!0}})}var u=F(l,2),d=e=>{PE(e,{id:`rate-limit-max-tokens`,label:`Max Tokens`,children:(e,t)=>{var n=WD();ta(n),ua(n,()=>Z.rateLimitForm.max_tokens,e=>Z.rateLimitForm.max_tokens=e),B(e,n)},$$slots:{default:!0}})};H(u,e=>{Z.rateLimitForm.period!==`concurrent`&&e(d)}),E(r);var f=F(r,4),p=e=>{B(e,GD())};H(f,e=>{Z.rateLimitEditing&&e(p)}),B(e,n)},$$slots:{default:!0}})}O()}Vr([`change`,`input`]);var JD=z(` `),YD=z(` Edit`,1),XD=z(` `,1),ZD=z(`
        In-flight
        `),QD=z(`
        Requests
        `),$D=z(`
        Tokens
        `),eO=z(`
        `),tO=z(`
        `);function nO(e,t){D(t,!0);var n=tO();U(n,21,()=>t.rules,e=>Z.rateLimitKey(e),(e,t)=>{var n=eO(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=e=>{var n=JD(),r=N(n);{let e=k(()=>Z.rateLimitScope(L(t))===`provider`?xo:Fa);q(r,{get icon(){return L(e)},class:`budget-period-icon`})}var i=F(r,2),a=N(i,!0);E(i),E(n),I((e,t)=>{G(n,`title`,e),V(a,t)},[()=>`Rule scope: `+Z.rateLimitScopeLabel(L(t)),()=>Z.rateLimitScopeLabel(L(t))]),B(e,n)},u=k(()=>Z.rateLimitScope(L(t))!==`user_path`);H(c,e=>{L(u)&&e(l)});var d=F(c,2),f=N(d);{let e=k(()=>Z.rateLimitIsConcurrent(L(t))?Aa:Ao);q(f,{get icon(){return L(e)},class:`budget-period-icon`})}var p=F(f,2),m=N(p,!0);E(p),E(d),E(s);var h=F(s,2),g=N(h),_=N(g),v=N(_,!0);E(_),E(g);var y=F(g,2),b=N(y),x=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitForm(L(t)),children:(e,t)=>{var n=YD();q(P(n),{get icon(){return fo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}})},S=k(()=>!Z.rateLimitIsReadOnly(L(t)));H(b,e=>{L(S)&&e(x)});var C=F(b,2);{let e=k(()=>Z.rateLimitResettingKey===Z.rateLimitKey(L(t))?`Resetting counters`:`Reset counters`),n=k(()=>Z.rateLimitResettingKey===Z.rateLimitKey(L(t)));OT(C,{get label(){return L(e)},class:`budget-action-btn budget-action-btn-warning`,onclick:()=>Z.resetRateLimit(L(t)),get disabled(){return L(n)},children:(e,n)=>{var r=XD(),i=P(r);q(i,{get icon(){return _o},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>Z.rateLimitResettingKey===Z.rateLimitKey(L(t))?`Resetting`:`Reset`]),B(e,r)},$$slots:{default:!0}})}var w=F(C,2),T=e=>{{let n=k(()=>Z.rateLimitDeletingKey===Z.rateLimitKey(L(t))?`Deleting rate limit`:`Delete rate limit`),r=k(()=>Z.rateLimitDeletingKey===Z.rateLimitKey(L(t)));OT(e,{get label(){return L(n)},class:`table-action-btn-danger budget-action-btn`,onclick:()=>Z.deleteRateLimit(L(t)),get disabled(){return L(r)},children:(e,n)=>{var r=XD(),i=P(r);q(i,{get icon(){return jo},class:`budget-action-icon`});var a=F(i,2),o=N(a,!0);E(a),I(e=>V(o,e),[()=>Z.rateLimitDeletingKey===Z.rateLimitKey(L(t))?`Deleting`:`Delete`]),B(e,r)},$$slots:{default:!0}})}},ee=k(()=>!Z.rateLimitIsReadOnly(L(t)));H(w,e=>{L(ee)&&e(T)}),E(y),E(h),E(i);var te=F(i,2),ne=N(te),re=e=>{var n=ZD(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u),E(l),E(o),E(n),I((e,t,n,r,i,l)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l)},[()=>Z.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)+`%`,()=>Z.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests),()=>`In-flight requests: `+Z.formatRateLimitNumber(L(t).in_flight)+` of `+Z.formatRateLimitNumber(L(t).max_requests),()=>`--budget-progress: `+Z.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":Z.rateLimitUsagePercent(L(t).in_flight,L(t).max_requests)>=100}),()=>Z.formatRateLimitNumber(L(t).in_flight)+` of `+Z.formatRateLimitNumber(L(t).max_requests)+` in flight`]),B(e,n)},ie=k(()=>Z.rateLimitIsConcurrent(L(t)));H(ne,e=>{L(ie)&&e(re)});var ae=F(ne,2),oe=e=>{var n=QD(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=N(f,!0);E(f),E(l),E(o),E(n),I((e,t,n,r,i,l,u)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l),V(p,u)},[()=>Z.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)+`%`,()=>Z.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests),()=>`Requests used: `+Z.formatRateLimitNumber(L(t).requests_used)+` of `+Z.formatRateLimitNumber(L(t).max_requests),()=>`--budget-progress: `+Z.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)+`%`,()=>({"budget-bar-fill-danger":Z.rateLimitUsagePercent(L(t).requests_used,L(t).max_requests)>=100}),()=>Z.formatRateLimitNumber(L(t).requests_used)+` of `+Z.formatRateLimitNumber(L(t).max_requests)+` requests`,()=>Z.formatRateLimitNumber(L(t).requests_remaining)+` left`]),B(e,n)},se=k(()=>!Z.rateLimitIsConcurrent(L(t))&&L(t).max_requests);H(ae,e=>{L(se)&&e(oe)});var ce=F(ae,2),le=e=>{var n=$D(),r=N(n),i=F(N(r),2),a=N(i,!0);E(i),E(r);var o=F(r,2),s=N(o);let c;var l=F(s,2),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=N(f,!0);E(f),E(l),E(o),E(n),I((e,t,n,r,i,l,u)=>{V(a,e),G(o,`aria-valuenow`,t),G(o,`aria-label`,n),Vi(o,r),c=W(s,1,`budget-bar-fill budget-bar-fill-usage`,null,c,i),V(d,l),V(p,u)},[()=>Z.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)+`%`,()=>Z.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens),()=>`Tokens used: `+Z.formatRateLimitNumber(L(t).tokens_used)+` of `+Z.formatRateLimitNumber(L(t).max_tokens),()=>`--budget-progress: `+Z.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)+`%`,()=>({"budget-bar-fill-danger":Z.rateLimitUsagePercent(L(t).tokens_used,L(t).max_tokens)>=100}),()=>Z.formatRateLimitNumber(L(t).tokens_used)+` of `+Z.formatRateLimitNumber(L(t).max_tokens)+` tokens`,()=>Z.formatRateLimitNumber(L(t).tokens_remaining)+` left`]),B(e,n)},ue=k(()=>!Z.rateLimitIsConcurrent(L(t))&&L(t).max_tokens);H(ce,e=>{L(ue)&&e(le)}),E(te),E(r),E(n),I((e,t,n,r,i)=>{G(a,`title`,e),V(o,t),V(m,n),G(_,`title`,r),V(v,i)},[()=>Z.rateLimitScopeLabel(L(t))+`: `+Z.rateLimitSubject(L(t)),()=>Z.rateLimitSubject(L(t)),()=>Z.rateLimitPeriodLabel(L(t)),()=>Z.rateLimitIsReadOnly(L(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(L(t))]),B(e,n)}),E(n),B(e,n),O()}var rO=z(`

        Rate Limits

        `),iO=z(``),aO=z(`
        Rate limit management is unavailable.
        `),oO=z(``),sO=z(`
        `),cO=z(`

        No rate limits configured yet.

        `),lO=z(`

        No rate limits match your filter.

        `),uO=z(`
        `);function dO(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`rate-limits`&&Z.fetchRateLimitsPage()});let n=k(()=>Z.filteredRateLimits());var r=uO(),i=N(r),a=N(i);iC(N(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=>{B(e,rO())},$$slots:{title:!0}}),E(a);var o=F(a,2),s=N(o),c=e=>{var t=iO();q(N(t),{get icon(){return mo},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=Z.rateLimitFormSubmitting),R(`click`,t,()=>Z.openRateLimitForm()),B(e,t)},l=k(()=>Z.rateLimitsEnabled()&&Z.rateLimitsAvailable&&!J.authError);H(s,e=>{L(l)&&e(c)}),E(o),E(i);var u=F(i,2);Kc(u,{});var d=F(u,2),f=e=>{B(e,aO())},p=k(()=>(!Z.rateLimitsEnabled()||!Z.rateLimitsAvailable)&&!J.authError);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{var t=oO(),n=N(t,!0);E(t),I(()=>V(n,Z.rateLimitError)),B(e,t)};H(m,e=>{Z.rateLimitError&&!J.authError&&e(h)});var g=F(m,2),_=e=>{ET(e,{label:`Loading rate limits...`})};H(g,e=>{Z.rateLimitsLoading&&!J.authError&&e(_)});var v=F(g,2),y=e=>{var t=sO(),n=N(t);jw(N(n),{id:`rate-limit-filter`,placeholder:`Filter by subject, scope, or period...`,label:`Filter rate limits by subject, scope, or period`,get value(){return Z.rateLimitFilter},set value(e){Z.rateLimitFilter=e}}),E(n),E(t),B(e,t)};H(v,e=>{(Z.rateLimits.length>0||Z.rateLimitFilter)&&Z.rateLimitsAvailable&&!J.authError&&!Z.rateLimitFormOpen&&e(y)});var b=F(v,2);qD(b,{});var x=F(b,2),S=e=>{nO(e,{get rules(){return L(n)}})};H(x,e=>{L(n).length>0&&Z.rateLimitsAvailable&&!J.authError&&e(S)});var C=F(x,2),w=e=>{B(e,cO())},T=k(()=>Z.rateLimits.length===0&&!Z.rateLimitFilter&&!Z.rateLimitsLoading&&!J.authError&&!Z.rateLimitError&&Z.rateLimitsAvailable&&Z.rateLimitsEnabled());H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{B(e,lO())},ne=k(()=>Z.rateLimits.length>0&&L(n).length===0&&Z.rateLimitFilter&&!Z.rateLimitsLoading&&!J.authError&&!Z.rateLimitError&&Z.rateLimitsAvailable&&Z.rateLimitsEnabled());H(ee,e=>{L(ne)&&e(te)}),E(r),B(e,r),O()}Vr([`click`]);function fO(e){return String(e||``).trim().toLowerCase()}function pO(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 mO(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 hO(e){return mO(e&&e.model?e.model.id:``,e?e.provider_type:``,e?e.provider_name:``,e?e.selector:``)}function gO(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 _O(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 vO(e){if(e===``||e==null)return null;let t=Number(e);return!Number.isFinite(t)||t<=0?null:t}function yO(e,t){let n={model:e},r=vO(t);return r!==null&&(n.weight=r),n}function bO(e){let t=Array.isArray(e)?e:[],n=[];for(let e of t){let t=String(e&&e.model||``).trim();t&&n.push(yO(t,e&&e.weight))}return n}function xO(e){switch(String(e||``).toLowerCase()){case`cost`:return`lowest cost`;case`round_robin`:case``:return`round robin`;default:return e}}var SO={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 CO(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:SO[e]||e}))}function wO(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(wO(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 EO(e){if(!e)return`—`;let t=Array.isArray(e.targets)?e.targets:[];return t.length>1?t.length+` targets · `+xO(e.strategy):e.resolved_model?e.resolved_model:e.target_provider?e.target_provider+`/`+e.target_model:e.target_model||`—`}function DO(e){return e?e.enabled===!1?`is-disabled`:e.valid?`is-valid`:`is-invalid`:`is-invalid`}function OO(e){return e?e.enabled===!1?`Disabled`:e.valid?`Active`:`Invalid`:`Invalid`}function kO(e){return Array.isArray(e)&&e.length>0&&e.indexOf(`/`)===-1}function AO(e,t){return!t||!e?``:e.effective_enabled===!1?`is-disabled`:kO(e.user_paths)?`is-restricted`:`is-enabled`}function jO(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 MO({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=fO(e&&e.name);!t||e.enabled===!1||!e.valid||o.set(t,e)}let s=new Map,c=i.map(e=>{let t=pO(e),n=null;for(let t of hO(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(fO(e&&e.name));if(e&&e.enabled!==!1&&e.valid&&t)continue;let n=null;for(let t of gO(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:EO(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:DO(e),alias_state_text:OO(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 NO(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 PO(e,t){return String(e||``).trim()||String(t||``).trim()||`Unassigned`}function FO(e,t){let n=String(e||``).trim(),r=String(t||``).trim();return!r||r===n?``:r}function IO(e){let t=String(e||``).trim();return t?t+`/`:``}function LO(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 RO(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 zO(e){for(let t of Array.isArray(e)?e:[])if(t&&t.access)return t.access.default_enabled!==!1;return!0}function BO(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 VO(e,t,n,r){let i=IO(t),a=r&&r.get(`/`)||null,o=i&&r&&r.get(i)||null,s=RO(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 HO(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:PO(e,n),type_label:FO(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=PO(o.provider_name,o.provider_type),o.type_label=FO(o.provider_name,o.provider_type),o.rows.push(t)}let o=Array.from(a.values()).map(e=>{let n=VO(t,e.provider_name,e.provider_type,r);return{...e,access:n,access_summary:jO(n),item_count_label:LO(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:LO(i)}),o}function UO(e,t){let n=BO(t,`/`),r=zO(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 WO(e){return e?String(e.access&&e.access.selector||``).trim()||String(e.override_selector||``).trim()||pO(e):``}function GO(e){if(!e)return[];let t=[];return e.is_alias?t.push(`alias-row`,DO(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 KO(e){return!!(e&&e.is_alias&&e.alias&&e.alias.name&&!e.alias.managed)}function qO(e){return!!(e&&!e.is_alias&&e.masking_alias&&e.masking_alias.name&&!e.masking_alias.managed)}function JO(e){return e&&e.is_alias&&e.alias&&e.alias.name?`alias-row-`+String(e.alias.name).replace(/[^a-zA-Z0-9_-]+/g,`-`):``}function YO(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 XO(e){return!!(e&&e.override)}function ZO(e){return e?`table-action-btn-active`:``}function QO(e,t){let n=`Edit `+String(e||`model access`);return t?n+` (virtual model exists)`:n}function $O(){return{source:``,target_model:``,target_weight:1,targets:[],strategy:`round_robin`,session_affinity:!0,user_paths:``,description:``,enabled:!0}}function ek(e){return String(e&&e.target_model||``).trim()!==``}function tk(e){return String(e&&e.target_model||``).trim()?!0:bO(e&&e.targets).length>0}function nk(e){return!!e&&Array.isArray(e.targets)&&e.targets.length>0}function rk(e){return nk(e)&&String(e&&e.strategy||``).toLowerCase()!==`cost`}function ik(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 ak(e){let t=Array.isArray(e&&e.targets)?e.targets:[];return t.length>0?{primaryModel:_O(t[0]),primaryWeight:t[0].weight||1,extraTargets:t.slice(1).map(e=>({model:_O(e),weight:e.weight||1}))}:{primaryModel:e&&e.target_provider?e.target_provider+`/`+e.target_model:e&&e.target_model||``,primaryWeight:1,extraTargets:[]}}function ok(e){return String(e||``).split(/\r?\n|,/).map(e=>String(e||``).trim()).filter(Boolean)}function sk(e,t,n){let r=String(e&&e.source||``).trim(),i=String(e&&e.target_model||``).trim(),a=bO(e&&e.targets),o=tk(e),s=String(t||``).trim(),c=n===`edit`&&!!s&&r!==s,l={source:r,user_paths:ok(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(yO(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 ck(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:_O(e)})):n.map(e=>yO(_O(e),e.weight))):n.length===1?t.target_model=_O(n[0]):t.target_model=e.target_provider?e.target_provider+`/`+e.target_model:e.target_model,t}function lk(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 uk(e,t,n){let r=Math.max(1,Number(t||75)),i=Math.min(n,e+r);return{limit:i,rendering:iMO({models:Wc.models,aliases:this.aliases,virtualModelsAvailable:this.virtualModelsAvailable,activeCategory:Wc.activeCategory}));get displayModels(){return L(this.#T)}set displayModels(e){j(this.#T,e)}#E=k(()=>HO(this.displayModels,Wc.models,this.modelOverrideViews));get displayModelGroups(){return L(this.#E)}set displayModelGroups(e){j(this.#E,e)}#D=k(()=>NO(this.displayModels,Wc.filter));get filteredDisplayModels(){return L(this.#D)}set filteredDisplayModels(e){j(this.#D,e)}#O=k(()=>{let e=this.filteredDisplayModels,t=Math.max(0,Math.min(Number(this.modelRenderLimit||0),e.length));return!Wc.filter&&t>=this.displayModels.length?this.displayModelGroups:HO(e.slice(0,t),Wc.models,this.modelOverrideViews)});get filteredDisplayModelGroups(){return L(this.#O)}set filteredDisplayModelGroups(e){j(this.#O,e)}#k=k(()=>UO(Wc.models,this.modelOverrideViews));get globalScopeRow(){return L(this.#k)}set globalScopeRow(e){j(this.#k,e)}modelsBusy(){return!!(Wc.loading||this.modelsRendering)}modelLoadingText(){if(Wc.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=dk(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=uk(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 Ts(`/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 pO(e)}findModelOverrideView(e){return BO(this.modelOverrideViews,e)}hasGlobalModelOverride(){return!!this.findModelOverrideView(`/`)}findExistingAliasByName(e){let t=fO(e);if(!t)return null;for(let e of this.aliases)if(fO(e&&e.name)===t)return e;return null}findConcreteModelByName(e){let t=fO(e);if(!t)return null;for(let e of Wc.models)if(hO(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&&AO(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(YO(e)){Y.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=ck(t);try{let e=await Es(`/admin/virtual-models`,`PUT`,n,{label:`alias state`});if(e.status===503){this.virtualModelsAvailable=!1,Y.error(`Virtual models feature is unavailable.`);return}if(e.stale)return;if(!e.ok){Y.error(e.status===401?`Authentication required.`:xs(e,`Failed to update alias state.`));return}Y.success(n.enabled?`Alias enabled.`:`Alias disabled.`),this.fetchVirtualModels()}catch(e){console.error(`Failed to toggle alias state:`,e),Y.error(`Failed to update alias state.`)}finally{this.rowTogglingKey=``}}async toggleModelRow(e){let t=WO(e);if(!t)return;let{method:n,payload:r,desired:i}=lk(t,this.findModelOverrideView(t),e.access||{});this.rowTogglingKey=e.key;try{let e=await Es(`/admin/virtual-models`,n,r,{label:`model access`});if(e.status===503){this.virtualModelsAvailable=!1,Y.error(`Virtual models feature is unavailable.`);return}if(!(n===`DELETE`&&e.status===404)){if(e.stale)return;if(!e.ok){Y.error(e.status===401?`Authentication required.`:xs(e,`Failed to update model access.`));return}}Y.success(i?`Model enabled.`:`Model disabled.`),Promise.all([Wc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to toggle model access:`,e),Y.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 Es(`/admin/virtual-models`,e.method,e.payload,{label:e.operation});if(t.status===503){this.virtualModelsAvailable=!1,Y.error(`Virtual models feature is unavailable.`);return}if(!(e.ignoreNotFound&&t.status===404)){if(t.stale)return;if(!t.ok){Y.error(t.status===401?`Authentication required.`:xs(t,e.failureMessage));return}}this.virtualModelsAvailable=!0,Y.success(e.notice),Promise.all([Wc.fetchModels(),this.fetchVirtualModels()])}catch(t){console.error(e.failureMessage,t),Y.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(){ik(this.vmForm)}vmFormHasPrimaryTarget(){return ek(this.vmForm)}vmFormShowStrategy(){return nk(this.vmForm)}vmStrategyOptions(){return CO(As.virtualModelStrategies(),this.vmForm.strategy)}vmFormShowWeights(){return rk(this.vmForm)}vmFormToggleRestricted(){return!!(this.vmForm&&this.vmForm.enabled)&&kO(ok(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=$O()}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=pO(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=zO(Wc.models),this.vmFormEffectiveEnabled=e.enabled!==!1;let{primaryModel:t,primaryWeight:n,extraTargets:r}=ak(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=WO(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=zO(Wc.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}=sk(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=pO(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=pO(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 Es(`/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.`:xs(t,`Failed to save virtual model.`);return}let r=!n&&t.status===204;this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),Y.success(n?`Alias saved.`:r?`Model access reset to inherited/default.`:`Model access saved.`),Promise.all([Wc.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 Es(`/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.`:xs(t,`Failed to remove virtual model.`);return}}this.virtualModelsAvailable=!0,this.closeVirtualModelForm(),Y.success(`Virtual model removed.`),Promise.all([Wc.fetchModels(),this.fetchVirtualModels()])}catch(e){console.error(`Failed to delete virtual model:`,e),this.vmFormError=`Failed to remove virtual model.`}finally{this.vmDeleting=!1}}}},pk=[{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 mk(e){let t=pk.find(t=>t.value===e);return t?t.label:String(e||``).replace(/_/g,` `)}function hk(e){return e&&typeof e==`object`?JSON.parse(JSON.stringify(e)):{}}function gk(e,t){let n=hk(e),r=t&&t.pricing?t.pricing:t;if(!r||typeof r!=`object`)return n;for(let e of pk)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=hk(r.tiers)),n}function _k(e){switch(String(e||``).trim()){case`config_yaml`:return`config.yaml`;case`model_registry`:return`Model registry`;default:return e?String(e):`Unknown`}}function vk(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 pk)t[e.value]!==null&&t[e.value]!==void 0&&(r[e.value]=_k(n[e.value]||`model_registry`));return r}function yk(e){let t=String(e&&e.selector||``).trim();return t?`Dashboard/API override (`+t+`)`:`Dashboard/API override`}function bk(e){let t=String(e||``).trim();return t?t+`/`:``}function xk(e){return String(e&&e.model&&e.model.id||``).trim()}function Sk(e){let t=String(e&&e.provider_name||``).trim(),n=xk(e);return t&&n?t+`/`+n:n}function Ck(e){return xk(e)}function wk(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&&wk(e).get(n)||null}function Ek(e,t,n){let r=wk(e),i=Sk(t),a=Ck(t),o=bk(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 Dk(e,t,n){let r=e&&e.model&&e.model.metadata?e.model.metadata:null,i=hk(r&&r.pricing),a=vk(r),o=Ek(t,e,n),s=o&&o.pricing?o.pricing:null;if(s){let e=yk(o);for(let t of pk)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=hk(s.tiers),a.tiers=e)}return{pricing:i,sources:a}}function Ok(e,t){let n=e&&e.pricing?e.pricing:{},r=[];for(let e of pk)n[e.value]!==null&&n[e.value]!==void 0&&r.push({id:t(),field:e.value,value:String(n[e.value])});return r}function kk(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 Ak(e,t){let n=kk(e,t&&t.id);return pk.filter(e=>e.value===(t&&t.field)||!n.has(e.value))}function jk(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 `+mk(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=hk(i)),Object.keys(n).length===0?{error:`Add at least one pricing field before saving.`}:{pricing:n}}function Mk(e,t,n){let r=e||{},i=t||{},a=n||{},o=gk(r,a);return pk.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 Nk=new class{#e=A(!0);get modelPricingOverridesAvailable(){return L(this.#e)}set modelPricingOverridesAvailable(e){j(this.#e,e,!0)}#t=A(M([]));get modelPricingOverrideViews(){return L(this.#t)}set modelPricingOverrideViews(e){j(this.#t,e,!0)}#n=A(``);get modelPricingOverrideError(){return L(this.#n)}set modelPricingOverrideError(e){j(this.#n,e,!0)}#r=A(!1);get modelPricingOverrideFormOpen(){return L(this.#r)}set modelPricingOverrideFormOpen(e){j(this.#r,e,!0)}#i=A(!1);get modelPricingOverrideSubmitting(){return L(this.#i)}set modelPricingOverrideSubmitting(e){j(this.#i,e,!0)}#a=A(!1);get modelPricingOverrideFormHasExistingOverride(){return L(this.#a)}set modelPricingOverrideFormHasExistingOverride(e){j(this.#a,e,!0)}#o=A(``);get modelPricingOverrideFormDisplayName(){return L(this.#o)}set modelPricingOverrideFormDisplayName(e){j(this.#o,e,!0)}#s=A(``);get modelPricingOverrideFormScope(){return L(this.#s)}set modelPricingOverrideFormScope(e){j(this.#s,e,!0)}#c=A(M([]));get modelPricingOverrideFormScopeOptions(){return L(this.#c)}set modelPricingOverrideFormScopeOptions(e){j(this.#c,e,!0)}#l=A(null);get modelPricingOverrideFormRow(){return L(this.#l)}set modelPricingOverrideFormRow(e){j(this.#l,e,!0)}#u=A(null);get modelPricingOverrideFormBasePricing(){return L(this.#u)}set modelPricingOverrideFormBasePricing(e){j(this.#u,e,!0)}#d=A(null);get modelPricingOverrideFormBasePricingSources(){return L(this.#d)}set modelPricingOverrideFormBasePricingSources(e){j(this.#d,e,!0)}#f=A(M([]));get modelPricingOverrideFormPreservedTiers(){return L(this.#f)}set modelPricingOverrideFormPreservedTiers(e){j(this.#f,e,!0)}#p=A(M([]));get modelPricingOverrideRows(){return L(this.#p)}set modelPricingOverrideRows(e){j(this.#p,e,!0)}#m=A(M({selector:``}));get modelPricingOverrideForm(){return L(this.#m)}set modelPricingOverrideForm(e){j(this.#m,e,!0)}_modelPricingOverrideRowID=0;pricingFieldOptions(){return pk}pricingFieldLabel(e){return mk(e)}async fetchModelPricingOverrides(){this.modelPricingOverrideError=``;try{let e=await Ts(`/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(bk(e&&e.provider_name))}hasModelPricingOverride(e){return!!this.findModelPricingOverrideView(Sk(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 Dk(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=bk(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=Sk(e),n=Ck(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=Ok(t,()=>this.nextModelPricingOverrideRowID()),this.modelPricingOverrideFormPreservedTiers=t&&t.pricing&&Array.isArray(t.pricing.tiers)?hk(t.pricing.tiers):[],this.modelPricingOverrideRows.length===0&&this.modelPricingOverrideFormPreservedTiers.length===0&&this.addModelPricingOverrideRow();let n=this.modelPricingOverrideFormRow,r=n?Dk(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 Ak(this.modelPricingOverrideRows,e)}addModelPricingOverrideRow(){let e=kk(this.modelPricingOverrideRows),t=pk.find(t=>!e.has(t.value))||pk[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 jk(this.modelPricingOverrideRows,this.modelPricingOverrideFormPreservedTiers)}modelPricingOverrideDraftPricing(){let e=this.modelPricingOverridePayload();return e&&e.pricing?e.pricing:{}}modelPricingEffectivePreviewRows(){return Mk(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 Es(`/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.`:xs(e,`Failed to save model pricing.`);return}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),Y.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 Es(`/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.`:xs(t,`Failed to remove model pricing override.`);return}}this.modelPricingOverridesAvailable=!0,this.closeModelPricingOverrideForm(),Y.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}}}},Pk=z(``);function Fk(e,t){D(t,!0);var n=Pk();let r;var i=F(N(n),2),a=N(i,!0);E(i),E(n),I((e,i,o)=>{r=W(n,1,`alias-toggle`,null,r,e),n.disabled=fk.rowTogglingKey===t.row.key||!fk.virtualModelsAvailable,G(n,`aria-label`,i),V(a,o)},[()=>({enabled:fk.rowToggleEnabled(t.row),restricted:fk.rowToggleRestricted(t.row)}),()=>fk.rowToggleAriaLabel(t.row),()=>fk.rowToggleLabel(t.row)]),R(`click`,n,()=>fk.toggleRowEnabled(t.row)),B(e,n),O()}Vr([`click`]);var Ik=z(`
        `);function Lk(e,t){D(t,!0);var n=Ik(),r=N(n),i=e=>{Fk(e,{get row(){return fk.globalScopeRow}})};H(r,e=>{fk.virtualModelsAvailable&&e(i)});var a=F(r,2),o=e=>{{let t=k(()=>Nk.modelPricingButtonLabel(`global model pricing`,Nk.hasGlobalPricingOverride())),n=k(()=>Nk.modelPricingButtonClass(Nk.hasGlobalPricingOverride()));OT(e,{get label(){return L(t)},get class(){return`table-icon-btn ${L(n)??``}`},onclick:()=>Nk.openGlobalPricingOverrideEdit(),children:(e,t)=>{q(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(a,e=>{Nk.modelPricingOverridesAvailable&&e(o)});var s=F(a,2),c=e=>{{let t=k(()=>QO(`global model access`,fk.hasGlobalModelOverride())),n=k(()=>ZO(fk.hasGlobalModelOverride()));OT(e,{get label(){return L(t)},get class(){return`table-icon-btn ${L(n)??``}`},onclick:()=>fk.openGlobalModelOverrideEdit(),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(s,e=>{fk.virtualModelsAvailable&&e(c)}),E(n),B(e,n),O()}function Rk(e){return String(e&&(e.primary_model||e.source)||``).trim()}function zk(e){return Array.isArray(e&&e.fallback_models)?e.fallback_models:Array.isArray(e&&e.targets)?e.targets:[]}function Bk(e){return Array.isArray(e)?e.map(e=>({...e,source:Rk(e),targets:zk(e)})):[]}function Vk(e){let t=zk(e);return t.length===0?`-`:t.join(`, `)}function Hk(e){return e&&e.enabled===!1?`Off`:e&&e.managed?`Config`:`On`}function Uk(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>Rk(e)===n)||null}function Wk(e,t){if(!t||t.is_alias)return!1;let n=Uk(e,pO(t));return!!(n&&n.enabled!==!1&&zk(n).length>0)}function Gk(e,t){return Wk(e,t)?`table-action-btn-failover-active`:``}function Kk(e,t){let n=`Edit failover for `+(t&&t.display_name?t.display_name:`model`);return Wk(e,t)?n+` (active)`:n}function qk(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 Jk(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 Yk(e){return{primary_model:String(e&&e.source||``).trim(),fallback_models:qk(e),enabled:!(e&&e.enabled===!1)}}function Xk(e){return Rk(e)}function Zk(e){let t={};return(Array.isArray(e)?e:[]).forEach(e=>{let n=Xk(e);n&&(t[n]=!0)}),t}function Qk(e,t){let n=Xk(t);return!!(n&&e&&e[n])}function $k(e,t){return(Array.isArray(e)?e:[]).filter(e=>Qk(t,e))}function eA(e,t){let n=Array.isArray(e)?e:[];return n.length>0&&$k(n,t).length===n.length}function tA(e){return[Rk(e),zk(e).join(` `)].join(` `).toLowerCase()}function nA(e,t){let n=Array.isArray(e)?e:[],r=String(t||``).trim().toLowerCase();return r?n.filter(e=>tA(e).includes(r)):n}function rA(e){return{primary_model:Rk(e),fallback_models:zk(e).map(e=>String(e||``).trim()).filter(Boolean),enabled:!!(e&&e.enabled!==!1)}}function iA(){return{source:``,target_model:``,targets:[],enabled:!0}}var Q=new class{#e=A(!0);get failoverAvailable(){return L(this.#e)}set failoverAvailable(e){j(this.#e,e,!0)}#t=A(M([]));get failoverRules(){return L(this.#t)}set failoverRules(e){j(this.#t,e,!0)}#n=A(!1);get failoverLoading(){return L(this.#n)}set failoverLoading(e){j(this.#n,e,!0)}#r=A(!1);get failoverSaving(){return L(this.#r)}set failoverSaving(e){j(this.#r,e,!0)}#i=A(!1);get failoverGenerating(){return L(this.#i)}set failoverGenerating(e){j(this.#i,e,!0)}#a=A(``);get failoverError(){return L(this.#a)}set failoverError(e){j(this.#a,e,!0)}#o=A(M([]));get failoverGeneratedRules(){return L(this.#o)}set failoverGeneratedRules(e){j(this.#o,e,!0)}#s=A(!1);get failoverDraftsOpen(){return L(this.#s)}set failoverDraftsOpen(e){j(this.#s,e,!0)}#c=A(M({}));get failoverDraftSelections(){return L(this.#c)}set failoverDraftSelections(e){j(this.#c,e,!0)}#l=A(``);get failoverDraftFilter(){return L(this.#l)}set failoverDraftFilter(e){j(this.#l,e,!0)}#u=A(!1);get failoverDraftSaving(){return L(this.#u)}set failoverDraftSaving(e){j(this.#u,e,!0)}#d=A(!1);get failoverFormOpen(){return L(this.#d)}set failoverFormOpen(e){j(this.#d,e,!0)}#f=A(`create`);get failoverFormMode(){return L(this.#f)}set failoverFormMode(e){j(this.#f,e,!0)}#p=A(!1);get failoverFormManaged(){return L(this.#p)}set failoverFormManaged(e){j(this.#p,e,!0)}#m=A(M(iA()));get failoverForm(){return L(this.#m)}set failoverForm(e){j(this.#m,e,!0)}failoverEnabled(){return As.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 Ts(`/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=Bk(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=iA()}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 qk(this.failoverForm)}setFailoverFormTargets(e){let t=Jk(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 Yk(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 Es(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(t.stale)return;if(!t.ok){this.failoverError=`Failed to save failover mapping.`;return}Y.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 Es(`/admin/failover`,`DELETE`,{primary_model:t},{label:`failover mapping`});if(e.stale)return;if(!e.ok){this.failoverError=`Failed to remove failover mapping.`;return}Y.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 Es(`/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=Bk(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),Y.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(){Ys.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:jo,dialogClass:`budget-reset-dialog`,onConfirm:async()=>{await this.resetFailoverRules(),this.failoverError&&(Ys.error=this.failoverError)}})}async resetFailoverRules(){if(!this.failoverSaving){this.failoverSaving=!0,this.failoverError=``;try{let e=await Es(`/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=Bk(e.data),this.failoverGeneratedRules=[],this.failoverDraftSelections={},this.failoverDraftFilter=``,this.failoverDraftsOpen=!1,Y.success(`Dashboard-managed failover mappings removed.`),Ys.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 Es(`/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=Bk(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 Xk(e)}selectAllFailoverDrafts(e){this.failoverDraftSelections=Zk(e)}failoverDraftSelected(e){return Qk(this.failoverDraftSelections,e)}setFailoverDraftSelected(e,t){let n=this.failoverDraftKey(e);n&&(this.failoverDraftSelections={...this.failoverDraftSelections,[n]:!!t})}selectedFailoverDrafts(){return $k(this.failoverGeneratedRules,this.failoverDraftSelections)}selectedFailoverDraftCount(){return this.selectedFailoverDrafts().length}failoverDraftCountLabel(){return this.selectedFailoverDraftCount()+` / `+this.failoverGeneratedRules.length+` selected`}allFailoverDraftsSelected(){return eA(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 tA(e)}filteredFailoverDrafts(){return nA(this.failoverGeneratedRules,this.failoverDraftFilter)}failoverDraftPayload(e){return rA(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 Es(`/admin/failover`,`PUT`,e,{label:`failover mapping`});if(n.stale)return;if(!n.ok){this.failoverError=`Failed to save failover mapping.`;return}}Y.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 Vk(e)}failoverPrimaryModel(e){return Rk(e)}failoverTargets(e){return zk(e)}findFailoverMapping(e){return Uk(this.failoverRules,e)}hasActiveFailoverMapping(e){return Wk(this.failoverRules,e)}failoverButtonClass(e){return Gk(this.failoverRules,e)}failoverButtonLabel(e){return Kk(this.failoverRules,e)}normalizeFailoverRules(e){return Bk(e)}failoverRuleStatus(e){return Hk(e)}qualifiedModelName(e){return pO(e)}},aA=z(``),oA=z(``),sA=z(`Config`),cA=z(`
        Targets
        `),lA=z(``),uA=z(`
        Redirects to
        `),dA=z(` `),fA=z(`
        `),pA=z(`
        `),mA=z(`
        `);function hA(e,t){D(t,!0);let n=k(()=>Nk.modelRowPricing(t.row));var r=mA(),i=N(r),a=N(i),o=N(a),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=e=>{B(e,aA())};H(l,e=>{t.row.is_alias&&e(u)});var d=F(l,2),f=e=>{B(e,oA())};H(d,e=>{!t.row.is_alias&&t.row.masking_alias&&e(f)});var p=F(d,2),m=e=>{B(e,sA())},h=k(()=>YO(t.row));H(p,e=>{L(h)&&e(m)}),E(o);var g=F(o,2),_=e=>{var n=cA(),r=F(N(n)),i=N(r,!0);E(r),E(n),I(()=>V(i,t.row.secondary_name)),B(e,n)};H(g,e=>{t.row.is_alias&&e(_)});var v=F(g,2),y=e=>{var n=uA(),r=F(N(n)),i=N(r,!0);E(r);var a=F(r,2),o=e=>{var n=lA();I(e=>{G(n,`aria-label`,fk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),G(n,`title`,fk.rowDeletingKey===t.row.key?`Removing redirect for `+t.row.display_name:`Remove redirect for `+t.row.display_name),n.disabled=e},[()=>!!fk.rowDeletingKey]),R(`click`,n,()=>fk.removeRedirectRow(t.row)),B(e,n)},s=k(()=>fk.virtualModelsAvailable&&qO(t.row));H(a,e=>{L(s)&&e(o)}),E(n),I(e=>V(i,e),[()=>EO(t.row.masking_alias)]),B(e,n)};H(v,e=>{!t.row.is_alias&&t.row.masking_alias&&e(y)}),E(a),E(i);var b=F(i);U(b,17,()=>t.columns,ai,(e,r)=>{var i=dA(),a=N(i,!0);E(i),I(e=>{W(i,1,Pi(L(r).class),`svelte-1iynym`),V(a,e)},[()=>L(r).value(t.row,L(n))]),B(e,i)});var x=F(b),S=N(x),C=e=>{var n=fA(),r=N(n);Fk(r,{get row(){return t.row}});var i=F(r,2),a=e=>{{let n=k(()=>fk.rowDeletingKey===t.row.key?`Removing alias `+t.row.alias.name:`Remove alias `+t.row.alias.name),r=k(()=>!!fk.rowDeletingKey);OT(e,{get label(){return L(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>fk.removeAliasRow(t.row),get disabled(){return L(r)},children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})}},o=k(()=>fk.virtualModelsAvailable&&KO(t.row));H(i,e=>{L(o)&&e(a)});var s=F(i,2),c=e=>{{let n=k(()=>`Edit alias `+t.row.alias.name);OT(e,{get label(){return L(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>fk.openVirtualModelEditAlias(t.row.alias),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(s,e=>{fk.virtualModelsAvailable&&e(c)}),E(n),B(e,n)},w=e=>{var n=pA(),r=N(n);Fk(r,{get row(){return t.row}});var i=F(r,2),a=e=>{{let n=k(()=>Nk.modelPricingButtonLabel(`model pricing for `+t.row.display_name,Nk.hasModelPricingOverride(t.row))),r=k(()=>Nk.modelPricingButtonClass(Nk.hasModelPricingOverride(t.row)));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Nk.openModelPricingOverrideEdit(t.row),children:(e,t)=>{q(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(i,e=>{Nk.modelPricingOverridesAvailable&&e(a)});var o=F(i,2),s=e=>{{let n=k(()=>Q.failoverButtonLabel(t.row)),r=k(()=>Q.failoverButtonClass(t.row));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Q.openFailoverForModel(t.row),children:(e,t)=>{q(e,{get icon(){return Do},class:`table-icon-svg`})},$$slots:{default:!0}})}},c=k(()=>Q.failoverAvailable&&Q.failoverEnabled());H(o,e=>{L(c)&&e(s)});var l=F(o,2),u=e=>{{let n=k(()=>Z.rateLimitGaugeTitle(t.row.display_name,Z.rateLimitGaugeClassForModel(t.row))),r=k(()=>Z.rateLimitGaugeClassForModel(t.row));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Z.openRateLimitInspectorForModel(t.row),children:(e,t)=>{q(e,{get icon(){return $a},class:`table-icon-svg`})},$$slots:{default:!0}})}},d=k(()=>Z.rateLimitsEnabled()&&Z.rateLimitInspectorModelID(t.row));H(l,e=>{L(d)&&e(u)});var f=F(l,2),p=e=>{{let n=k(()=>`Edit redirect for `+t.row.display_name);OT(e,{get label(){return L(n)},class:`table-icon-btn table-action-btn-active`,onclick:()=>fk.openVirtualModelEditAlias(t.row.masking_alias),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(f,e=>{fk.virtualModelsAvailable&&t.row.masking_alias&&t.row.masking_alias.name&&e(p)});var m=F(f,2),h=e=>{{let n=k(()=>QO(`model access for `+t.row.display_name,XO(t.row.access))),r=k(()=>ZO(XO(t.row.access)));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>fk.openVirtualModelEditModel(t.row),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(m,e=>{fk.virtualModelsAvailable&&!t.row.masking_alias&&e(h)}),E(n),B(e,n)};H(S,e=>{t.row.is_alias?e(C):e(w,-1)}),E(x),E(r),I((e,n)=>{G(r,`id`,e),W(r,1,n,`svelte-1iynym`),V(c,t.row.display_name)},[()=>JO(t.row)||void 0,()=>Pi(GO(t.row))]),B(e,r),O()}Vr([`click`]);var gA={headerLines:[`Modes`],value:e=>(e.model?.metadata?.modes??[]).join(`, `)||`-`};function _A(e,t){return{headerLines:e,class:`col-price`,value:t}}var vA=_A([`Input / Output ($/MTok)`],(e,t)=>yc(t?.input_per_mtok)+` / `+yc(t?.output_per_mtok)),yA={all:[vA],text_generation:[gA,vA,_A([`Cached $/MTok`],(e,t)=>yc(t?.cached_input_per_mtok))],embedding:[_A([`Input`,`$/MTok`],(e,t)=>yc(t?.input_per_mtok))],image:[_A([`$/Image`],(e,t)=>bc(t?.per_image))],audio:[_A([`$/Second`],(e,t)=>bc(t?.per_second_input)),_A([`$/Character`],(e,t)=>bc(t?.per_character_input))],video:[_A([`$/Second (In)`],(e,t)=>bc(t?.per_second_input)),_A([`$/Second (Out)`],(e,t)=>bc(t?.per_second_output))],utility:[_A([`$/Page`],(e,t)=>bc(t?.per_page)),_A([`$/Request`],(e,t)=>bc(t?.per_request))]};function bA(e){return yA[e]||yA.all}function xA(e){return bA(e).length+2}var SA=z(`
        `),CA=z(` `,1),wA=z(``),TA=z(` `),EA=z(` `),DA=z(`
        `),OA=z(`
        `),kA=z(`
        Model
        `);function AA(e,t){D(t,!0);let n=k(()=>Wc.activeCategory||`all`),r=k(()=>bA(L(n))),i=k(()=>xA(L(n)));var a=kA(),o=N(a),s=N(o),c=N(s),l=F(N(c));U(l,17,()=>L(r),ai,(e,t)=>{var n=wA();U(n,21,()=>L(t).headerLines,ai,(e,t,n)=>{var r=CA(),i=P(r),a=e=>{B(e,SA())};H(i,e=>{n>0&&e(a)});var o=F(i,1,!0);I(()=>V(o,L(t))),B(e,r)}),E(n),I(()=>W(n,1,Pi(L(t).class),`svelte-1911hy6`)),B(e,n)});var u=F(l);Lk(N(u),{}),E(u),E(c),E(s),U(F(s),17,()=>fk.filteredDisplayModelGroups,e=>e.key,(e,t)=>{var n=OA(),a=N(n),o=N(a),s=N(o),c=N(s),l=N(c),u=N(l),d=N(u,!0);E(u);var f=F(u,2),p=e=>{var n=TA(),r=N(n,!0);E(n),I(()=>V(r,`(`+L(t).type_label+`)`)),B(e,n)};H(f,e=>{L(t).type_label&&e(p)});var m=F(f,2),h=e=>{var n=EA(),r=N(n,!0);E(n),I(()=>V(r,L(t).item_count_label)),B(e,n)};H(m,e=>{L(t).item_count_label&&e(h)}),E(l);var g=F(l,2),_=e=>{var n=DA(),r=N(n,!0);E(n),I(()=>V(r,L(t).access_summary)),B(e,n)};H(g,e=>{L(t).access_summary&&e(_)}),E(c);var v=F(c,2),y=N(v),b=e=>{Fk(e,{get row(){return L(t)}})};H(y,e=>{L(t).access.selector&&e(b)});var x=F(y,2),S=e=>{{let n=k(()=>Nk.modelPricingButtonLabel(`provider pricing for `+L(t).display_name,Nk.hasProviderPricingOverride(L(t)))),r=k(()=>Nk.modelPricingButtonClass(Nk.hasProviderPricingOverride(L(t))));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Nk.openProviderPricingOverrideEdit(L(t)),children:(e,t)=>{q(e,{get icon(){return qa},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(x,e=>{Nk.modelPricingOverridesAvailable&&L(t).provider_name&&e(S)});var C=F(x,2),w=e=>{{let n=k(()=>Z.rateLimitGaugeTitle(`provider `+L(t).display_name,Z.rateLimitGaugeClassForProvider(L(t)))),r=k(()=>Z.rateLimitGaugeClassForProvider(L(t)));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>Z.openRateLimitInspectorForProvider(L(t)),children:(e,t)=>{q(e,{get icon(){return $a},class:`table-icon-svg`})},$$slots:{default:!0}})}},T=k(()=>Z.rateLimitsEnabled()&&L(t).provider_name);H(C,e=>{L(T)&&e(w)});var ee=F(C,2),te=e=>{{let n=k(()=>QO(`provider access for `+L(t).display_name,XO(L(t).access))),r=k(()=>ZO(XO(L(t).access)));OT(e,{get label(){return L(n)},get class(){return`table-icon-btn ${L(r)??``}`},onclick:()=>fk.openProviderOverrideEdit(L(t)),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(ee,e=>{fk.virtualModelsAvailable&&L(t).access.selector&&e(te)}),E(v),E(s),E(o),E(a),U(F(a),17,()=>L(t).rows,e=>e.key,(e,t)=>{hA(e,{get row(){return L(t)},get columns(){return L(r)}})}),E(n),I(()=>{G(o,`colspan`,L(i)),V(d,L(t).display_name)}),B(e,n)}),E(o),E(a),B(e,a),O()}var jA=z(``);function MA(e,t){let n=K(t,`enabled`,3,!1),r=K(t,`label`,3,``),i=K(t,`disabled`,3,!1),a=K(t,`restricted`,3,!1);var o=jA();let s;var c=F(N(o),2),l=N(c,!0);E(c),E(o),I(()=>{s=W(o,1,`alias-toggle`,null,s,{enabled:n(),restricted:a()}),o.disabled=i(),G(o,`aria-label`,(n()?`Disable `:`Enable `)+r()),V(l,t.text??(n()?`Enabled`:`Disabled`))}),R(`click`,o,function(...e){t.onclick?.apply(this,e)}),B(e,o)}Vr([`click`]);var NA=z(``),PA=z(`
        `);function FA(e,t){D(t,!0);let n=K(t,`model`,15,``),r=K(t,`weight`,15),i=K(t,`id`,3,void 0),a=K(t,`placeholder`,3,`openai/gpt-4o`),o=K(t,`showRemove`,3,!0);var s=PA(),c=N(s);ta(c);var l=F(c,2),u=e=>{var t=NA();ta(t),I(()=>t.disabled=fk.vmFormManaged),ua(t,r),B(e,t)},d=k(()=>fk.vmFormShowWeights());H(l,e=>{L(d)&&e(u)});var f=F(l,2),p=e=>{OT(e,{label:`Remove target`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,get onclick(){return t.onremove},get disabled(){return fk.vmFormManaged},children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})};H(f,e=>{o()&&e(p)}),E(s),I(()=>{G(c,`id`,i()),G(c,`placeholder`,a()),c.disabled=fk.vmFormManaged}),ua(c,n),B(e,s),O()}var IA=z(`

        `),LA=z(`adaptive lets the registered routing extension pick the target per + request.`,1),RA=z(`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),zA=z(``),BA=z(`

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

        `),VA=z(``),HA=z(``),UA=z(``),WA=z(`
        `,1),GA=z(``),KA=z(`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),qA=z(``),JA=z(` `),YA=z(`
        Targets
        `,1);function XA(e,t){D(t,!0);let n=fk;kn(()=>{n.vmFormOpen&&As.ensureLoaded()});{let t=e=>{iC(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=IA(),r=N(t,!0);E(t),I(()=>V(r,n.vmFormDisplayName||n.vmForm.source||`Virtual model`)),B(e,t)},help:e=>{He();var t=RA(),n=F(P(t),7),r=e=>{var t=LA();He(),B(e,t)},i=k(()=>As.virtualModelStrategies().includes(`adaptive`));H(n,e=>{L(i)&&e(r)});var a=F(n,8);a.textContent=`{provider_name}/`;var o=F(a,2);o.textContent=`{provider_name}/{model}`,He(7),B(e,t)},$$slots:{title:!0,help:!0}})},r=e=>{var t=Zr(),r=P(t),i=e=>{var t=zA();I(()=>t.disabled=n.vmDeleting||n.vmSubmitting),R(`click`,t,()=>n.deleteVirtualModel()),B(e,t)};H(r,e=>{n.vmFormHasExisting&&!n.vmFormManaged&&e(i)}),B(e,t)},i=k(()=>n.vmDeleting||n.vmFormManaged),a=k(()=>n.vmFormMode===`edit`?`Save`:`Create`),o=k(()=>n.vmFormMode===`edit`?vo:mo);ME(e,{get open(){return n.vmFormOpen},ariaLabel:`Virtual model editor`,get error(){return n.vmFormError},get submitting(){return n.vmSubmitting},get submitDisabled(){return L(i)},get submitLabel(){return L(a)},get submitIcon(){return L(o)},onclose:()=>n.closeVirtualModelForm(),onsubmit:()=>n.submitVirtualModelForm(),header:t,extraActions:r,children:(e,t)=>{var r=YA(),i=P(r),a=e=>{B(e,BA())};H(i,e=>{n.vmFormManaged&&e(a)});var o=F(i,2);PE(o,{id:`virtual-model-source`,label:`Source`,children:(e,t)=>{var r=VA();ta(r),I(()=>r.disabled=n.vmFormSourceLocked||n.vmFormManaged),ua(r,()=>n.vmForm.source,e=>n.vmForm.source=e),B(e,r)},$$slots:{default:!0}});var s=F(o,2);U(s,21,()=>Wc.models,e=>pO(e),(e,t)=>{var n=HA(),r=N(n,!0);E(n);var i={};I((e,t)=>{V(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(L(t)),()=>pO(L(t))]),B(e,n)}),E(s);var c=F(s,2),l=F(N(c),2);{let e=k(()=>n.vmFormHasPrimaryTarget());FA(l,{id:`virtual-model-target`,get showRemove(){return L(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=F(l,2);U(u,17,()=>n.vmForm.targets,ai,(e,t,r)=>{FA(e,{placeholder:`groq/llama`,onremove:()=>n.removeVmTarget(r),get model(){return L(t).model},set model(e){L(t).model=e},get weight(){return L(t).weight},set weight(e){L(t).weight=e}})});var d=F(u,2),f=N(d);q(N(f),{get icon(){return mo},class:`form-action-icon`}),He(2),E(f),E(d),E(c);var p=F(c,2),m=e=>{var t=WA(),r=P(t);PE(r,{id:`virtual-model-strategy`,label:`Load-balancing strategy`,children:(e,t)=>{var r=UA();U(r,21,()=>n.vmStrategyOptions(),e=>e.value,(e,t)=>{var n=HA(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(r),I(()=>r.disabled=n.vmFormManaged),Wi(r,()=>n.vmForm.strategy,e=>n.vmForm.strategy=e),B(e,r)},$$slots:{default:!0}});var i=F(r,2),a=N(i),o=N(a);ta(o),He(2),E(a),E(i),I(()=>o.disabled=n.vmFormManaged),da(o,()=>n.vmForm.session_affinity,e=>n.vmForm.session_affinity=e),B(e,t)},h=k(()=>n.vmFormShowStrategy());H(p,e=>{L(h)&&e(m)});var g=F(p,2),_=N(g);iC(_,{copyId:`virtual-model-user-paths-help`,label:`user paths help`,get open(){return n.vmFormUserPathsHelpOpen},set open(e){n.vmFormUserPathsHelpOpen=e},title:e=>{B(e,GA())},help:e=>{He();var t=KA();He(2),B(e,t)},$$slots:{title:!0,help:!0}});var v=F(_,2);dt(v),G(v,`placeholder`,`/ +/team/alpha +/non-existing`),E(g);var y=F(g,2);PE(y,{id:`virtual-model-description`,label:`Description`,children:(e,t)=>{var r=qA();dt(r),I(()=>r.disabled=n.vmFormManaged),ua(r,()=>n.vmForm.description,e=>n.vmForm.description=e),B(e,r)},$$slots:{default:!0}});var b=F(y,2),x=N(b),S=e=>{var t=JA(),r=N(t,!0);E(t),I(()=>V(r,`Default enabled: `+(n.vmFormDefaultEnabled?`yes`:`no`)+` · Effective now: `+(n.vmFormEffectiveEnabled?`yes`:`no`))),B(e,t)};H(x,e=>{n.vmFormMode===`edit`&&e(S)});var C=F(x,2),w=N(C);{let e=k(()=>n.vmFormToggleRestricted()),t=k(()=>n.vmFormToggleLabel());MA(w,{get enabled(){return n.vmForm.enabled},get restricted(){return L(e)},label:`virtual model`,get disabled(){return n.vmFormManaged},get text(){return L(t)},onclick:()=>{n.vmFormManaged||(n.vmForm.enabled=!n.vmForm.enabled)}})}E(C),E(b),I(()=>{f.disabled=n.vmFormManaged,v.disabled=n.vmFormManaged}),R(`click`,f,()=>n.addVmTarget()),ua(v,()=>n.vmForm.user_paths,e=>n.vmForm.user_paths=e),B(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}})}O()}Vr([`click`]);var ZA=z(`

        Pricing override

        `,1),QA=z(``),$A=z(``),ej=z(``),tj=z(``),nj=z(`
        `),rj=z(`
        Tiered pricing exists for this override and will be preserved. Tier editing can be added + without a database migration.
        `),ij=z(`
        No pricing fields set.
        `),aj=z(`
        `),oj=z(`

        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 sj(e,t){D(t,!0);let n=Nk;ME(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=ZA(),r=F(P(t),2),i=N(r,!0);E(r),I(()=>V(i,n.modelPricingOverrideFormDisplayName||n.modelPricingOverrideForm.selector||`Pricing`)),B(e,t)},extraActions:e=>{var t=Zr(),r=P(t),i=e=>{var t=QA();I(()=>t.disabled=n.modelPricingOverrideSubmitting),R(`click`,t,()=>n.deleteModelPricingOverride()),B(e,t)};H(r,e=>{n.modelPricingOverrideFormHasExistingOverride&&e(i)}),B(e,t)},children:(e,t)=>{var r=oj(),i=P(r),a=N(i);PE(a,{id:`model-pricing-override-selector`,label:`Selector`,children:(e,t)=>{var r=$A();ta(r),ua(r,()=>n.modelPricingOverrideForm.selector,e=>n.modelPricingOverrideForm.selector=e),B(e,r)},$$slots:{default:!0}});var o=F(a,2),s=e=>{PE(e,{id:`model-pricing-override-scope`,label:`Scope`,children:(e,t)=>{var r=tj();U(r,21,()=>n.modelPricingOverrideFormScopeOptions,e=>e.value,(e,t)=>{var n=ej(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(r),R(`change`,r,()=>n.setModelPricingOverrideScope(n.modelPricingOverrideFormScope)),Wi(r,()=>n.modelPricingOverrideFormScope,e=>n.modelPricingOverrideFormScope=e),B(e,r)},$$slots:{default:!0}})};H(o,e=>{n.modelPricingOverrideFormScopeOptions.length>1&&e(s)}),E(i);var c=F(i,4);U(c,21,()=>n.modelPricingOverrideRows,e=>e.id,(e,t,r)=>{var i=nj(),a=N(i),o=N(a),s=F(o,2);U(s,21,()=>n.availablePricingFieldOptions(L(t)),e=>e.value,(e,t)=>{var n=ej(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).group+` - `+L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(s),E(a);var c=F(a,2),l=N(c),u=F(l,2);ta(u),E(c);var d=F(c,2);{let e=k(()=>`Remove `+n.pricingFieldLabel(L(t).field));OT(d,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn pricing-override-remove-row`,onclick:()=>n.removeModelPricingOverrideRow(L(t)),children:(e,t)=>{q(e,{get icon(){return Ro},class:`table-icon-svg`})},$$slots:{default:!0}})}E(i),I(()=>{G(o,`for`,`pricing-type-`+L(t).id),G(s,`id`,`pricing-type-`+L(t).id),G(l,`for`,`pricing-value-`+L(t).id),G(u,`id`,`pricing-value-`+L(t).id)}),Wi(s,()=>L(t).field,e=>L(t).field=e),ua(u,()=>L(t).value,e=>L(t).value=e),B(e,i)}),E(c);var l=F(c,2),u=N(l);q(N(u),{get icon(){return mo},class:`form-action-icon`}),He(2),E(u),E(l);var d=F(l,2),f=e=>{B(e,rj())};H(d,e=>{n.modelPricingOverrideFormPreservedTiers.length>0&&e(f)});var p=F(d,2),m=F(N(p),2),h=e=>{B(e,ij())},g=k(()=>n.modelPricingEffectivePreviewRows().length===0);H(m,e=>{L(g)&&e(h)}),U(F(m,2),17,()=>n.modelPricingEffectivePreviewRows(),e=>e.field,(e,t)=>{var n=aj(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(n),I(e=>{V(i,L(t).label),V(o,e),V(c,L(t).source)},[()=>L(t).value===null||L(t).value===void 0?`-`:bc(Number(L(t).value))]),B(e,n)}),E(p),R(`click`,u,()=>n.addModelPricingOverrideRow()),B(e,r)},$$slots:{header:!0,extraActions:!0,default:!0}}),O()}Vr([`click`,`change`]);var cj=z(`

        Failover mapping

        `,1),lj=z(``),uj=z(`

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

        `),dj=z(``),fj=z(`
        `),pj=z(`
        `,1),mj=z(`
        `);function hj(e,t){D(t,!0);{let t=e=>{var t=cj(),n=F(P(t),2),r=N(n,!0);E(n),I(()=>V(r,Q.failoverForm.source||`Failover`)),B(e,t)},n=e=>{var t=Zr(),n=P(t),r=e=>{var t=lj();I(()=>t.disabled=Q.failoverSaving||Q.failoverGenerating),R(`click`,t,()=>Q.deleteFailoverRule()),B(e,t)};H(n,e=>{Q.failoverFormMode===`edit`&&!Q.failoverFormManaged&&e(r)}),B(e,t)},r=k(()=>Q.failoverGenerating||Q.failoverFormManaged);ME(e,{get open(){return Q.failoverFormOpen},ariaLabel:`Failover editor`,get error(){return Q.failoverError},get submitting(){return Q.failoverSaving},get submitDisabled(){return L(r)},submitLabel:`Save`,onclose:()=>Q.closeFailoverForm(),onsubmit:()=>Q.submitFailoverForm(),header:t,extraActions:n,children:(e,t)=>{var n=mj(),r=N(n),i=e=>{B(e,uj())};H(r,e=>{Q.failoverFormManaged&&e(i)});var a=F(r,2);U(a,21,()=>Wc.models,ai,(e,t)=>{var n=dj(),r=N(n,!0);E(n);var i={};I((e,t)=>{V(r,e),i!==(i=t)&&(n.value=(n.__value=t)??``)},[()=>pO(L(t)),()=>pO(L(t))]),B(e,n)}),E(a);var o=F(a,2);PE(o,{id:`failover-target`,label:`Fallback models`,children:(e,t)=>{var n=pj(),r=P(n),i=N(r),a=N(i);ta(a);var o=F(a,2),s=e=>{OT(e,{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removePrimaryFailoverTarget(),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}})};H(o,e=>{Q.failoverForm.target_model&&e(s)}),E(i),U(F(i,2),17,()=>Q.failoverForm.targets,ai,(e,t,n)=>{var r=fj(),i=N(r);ta(i),OT(F(i,2),{label:`Remove fallback model`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>Q.removeFailoverTarget(n),get disabled(){return Q.failoverFormManaged},children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}}),E(r),I(()=>i.disabled=Q.failoverFormManaged),ua(i,()=>L(t).model,e=>L(t).model=e),B(e,r)}),E(r);var c=F(r,2),l=N(c);q(N(l),{get icon(){return mo},class:`form-action-icon`}),He(2),E(l);var u=F(l,2),d=N(u);q(d,{get icon(){return Io},class:`form-action-icon`});var f=F(d,2),p=N(f,!0);E(f),E(u),E(c),I(e=>{a.disabled=Q.failoverFormManaged,l.disabled=Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving,u.disabled=e,V(p,Q.failoverGenerating?`Generating...`:`Generate automatically`)},[()=>Q.failoverFormManaged||Q.failoverGenerating||Q.failoverSaving||!Q.failoverEnabled()]),ua(a,()=>Q.failoverForm.target_model,e=>Q.failoverForm.target_model=e),R(`click`,l,()=>Q.addFailoverTarget()),R(`click`,u,()=>Q.generateFailoverForForm()),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=N(s);MA(N(c),{get enabled(){return Q.failoverForm.enabled},label:`failover mapping`,get disabled(){return Q.failoverFormManaged},onclick:()=>{Q.failoverFormManaged||(Q.failoverForm.enabled=!Q.failoverForm.enabled)}}),E(c),E(s),E(n),B(e,n)},$$slots:{header:!0,extraActions:!0,default:!0}})}O()}Vr([`click`]);var gj=z(` `),_j=z(`
        `),vj=z(``),yj=z(`
        `),bj=z(`

        No failover suggestions were generated.

        `),xj=z(`

        No failover drafts match the filter.

        `),Sj=z(``),Cj=z(``);function wj(e,t){D(t,!0),Us(e,{get open(){return Q.failoverDraftsOpen},variant:`editor`,onclose:()=>Q.closeFailoverDraftsModal(),children:(e,t)=>{var n=Cj(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=gj(),n=N(t,!0);E(t),I(e=>V(n,e),[()=>Q.failoverDraftCountLabel()]),B(e,t)};H(a,e=>{Q.failoverGeneratedRules.length>0&&e(o)}),zs(F(a,2),{label:`Close failover drafts`,onclick:()=>Q.closeFailoverDraftsModal(),get disabled(){return Q.failoverDraftSaving}}),E(i),E(r);var s=F(r,2),c=e=>{ET(e,{label:`Generating failover drafts...`,class:`failover-drafts-loading`})};H(s,e=>{Q.failoverGenerating&&e(c)});var l=F(s,2),u=e=>{var t=_j(),n=N(t);jw(n,{placeholder:`Filter failover drafts...`,label:`Filter failover drafts`,get value(){return Q.failoverDraftFilter},set value(e){Q.failoverDraftFilter=e}});var r=F(n,2),i=N(r);q(i,{get icon(){return Va},class:`form-action-icon`});var a=F(i,2),o=N(a,!0);E(a),E(r),E(t),I(e=>{r.disabled=Q.failoverDraftSaving,V(o,e)},[()=>Q.allFailoverDraftsSelected()?`Deselect all`:`Select all`]),R(`click`,r,()=>Q.toggleAllFailoverDrafts()),B(e,t)};H(l,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&e(u)});var d=F(l,2),f=e=>{var t=yj();U(t,21,()=>Q.filteredFailoverDrafts(),e=>`failover-draft:`+Q.failoverPrimaryModel(e),(e,t)=>{var n=vj(),r=N(n);ta(r);var i=F(r,2),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s,!0);E(s),E(i),E(n),I((e,t,n,i)=>{ra(r,e),r.disabled=Q.failoverDraftSaving,G(r,`aria-label`,t),V(o,n),V(c,i)},[()=>Q.failoverDraftSelected(L(t)),()=>`Select failover draft for `+Q.failoverPrimaryModel(L(t)),()=>Q.failoverPrimaryModel(L(t)),()=>Q.failoverTargetLabel(L(t))]),R(`change`,r,e=>Q.setFailoverDraftSelected(L(t),e.currentTarget.checked)),B(e,n)}),E(t),B(e,t)},p=k(()=>!Q.failoverGenerating&&Q.filteredFailoverDrafts().length>0);H(d,e=>{L(p)&&e(f)});var m=F(d,2),h=e=>{B(e,bj())};H(m,e=>{!Q.failoverGenerating&&Q.failoverGeneratedRules.length===0&&!Q.failoverError&&e(h)});var g=F(m,2),_=e=>{B(e,xj())},v=k(()=>!Q.failoverGenerating&&Q.failoverGeneratedRules.length>0&&Q.filteredFailoverDrafts().length===0);H(g,e=>{L(v)&&e(_)});var y=F(g,2),b=e=>{var t=Sj(),n=N(t,!0);E(t),I(()=>V(n,Q.failoverError)),B(e,t)};H(y,e=>{Q.failoverError&&e(b)});var x=F(y,2),S=N(x),C=F(S,2),w=N(C);q(w,{get icon(){return vo},class:`form-action-icon`});var T=F(w,2),ee=N(T,!0);E(T),E(C),E(x),E(n),I(e=>{S.disabled=Q.failoverDraftSaving,C.disabled=e,V(ee,Q.failoverDraftSaving?`Saving...`:`Save selected`)},[()=>Q.failoverGenerating||Q.failoverDraftSaving||Q.selectedFailoverDraftCount()===0]),R(`click`,S,()=>Q.closeFailoverDraftsModal()),R(`click`,C,()=>Q.saveSelectedFailoverDrafts()),B(e,n)},$$slots:{default:!0}}),O()}Vr([`click`,`change`]);var Tj=z(`
        Rate limit management is unavailable.
        `),Ej=z(` Add`,1),Dj=z(`

        `),Oj=z(`

        No rules.

        `),kj=z(` Edit`,1),Aj=z(`
        `),jj=z(`
        `),Mj=z(`

        `),Nj=z(``),Pj=z(``);function Fj(e,t){D(t,!0);function n(){J.dialogOpen||Z.closeRateLimitInspector()}Us(e,{get open(){return Z.rateLimitInspectorOpen},variant:`editor`,onclose:n,children:(e,t)=>{var n=Pj(),r=N(n),i=N(r),a=F(N(i),2),o=N(a),s=N(o,!0);E(o),E(a),E(i),zs(F(i,2),{label:`Close rate limits inspector`,onclick:()=>Z.closeRateLimitInspector()}),E(r);var c=F(r,2),l=e=>{ET(e,{label:`Loading rate limits...`})},u=e=>{B(e,Tj())},d=e=>{var t=Zr();U(P(t),17,()=>Z.rateLimitInspectorSections(),e=>e.key,(e,t)=>{var n=Mj(),r=N(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2);{let e=k(()=>`Add `+L(t).title.toLowerCase());OT(o,{get label(){return L(e)},class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(L(t).scope,L(t).subject),children:(e,t)=>{var n=Ej();q(P(n),{get icon(){return mo},class:`table-icon-svg`}),He(2),B(e,n)},$$slots:{default:!0}})}E(r);var s=F(r,2),c=e=>{var n=Dj(),r=N(n,!0);E(n),I(()=>V(r,L(t).hint)),B(e,n)};H(s,e=>{L(t).hint&&e(c)});var l=F(s,2),u=e=>{B(e,Oj())},d=e=>{var n=jj();U(n,21,()=>L(t).items,e=>Z.rateLimitKey(e),(e,t)=>{var n=Aj(),r=N(n),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=N(s),l=N(c);{let e=k(()=>Z.rateLimitIsConcurrent(L(t))?Aa:Ao);q(l,{get icon(){return L(e)},class:`budget-period-icon`})}var u=F(l,2),d=N(u,!0);E(u),E(c),E(s);var f=F(s,2),p=N(f),m=N(p),h=N(m,!0);E(m);var g=F(m,2),_=N(g,!0);E(g),E(p);var v=F(p,2),y=N(v),b=e=>{OT(e,{label:`Edit rate limit`,class:`budget-action-btn`,onclick:()=>Z.openRateLimitFormFromInspector(null,null,L(t)),children:(e,t)=>{var n=kj();q(P(n),{get icon(){return fo},class:`budget-action-icon`}),He(2),B(e,n)},$$slots:{default:!0}})},x=k(()=>!Z.rateLimitIsReadOnly(L(t)));H(y,e=>{L(x)&&e(b)}),E(v),E(f),E(i),E(r),E(n),I((e,t,r,i,a,s,c,l)=>{W(n,1,`budget-row ${e??``}`),Vi(n,t),G(n,`title`,r),V(o,i),V(d,a),V(h,s),G(g,`title`,c),V(_,l)},[()=>Z.rateLimitPressureClass(L(t)),()=>Z.rateLimitPressureStyle(L(t)),()=>Z.rateLimitPressurePercent(L(t))+`% of the most constrained cap used`,()=>Z.rateLimitSubject(L(t)),()=>Z.rateLimitPeriodLabel(L(t)),()=>Z.rateLimitInspectorSummary(L(t)),()=>Z.rateLimitIsReadOnly(L(t))?`Declared in configuration; read-only in the dashboard`:`Managed via dashboard or admin API`,()=>Z.rateLimitSourceLabel(L(t))]),B(e,n)}),E(n),B(e,n)};H(l,e=>{L(t).items.length===0?e(u):e(d,-1)}),E(n),I(()=>V(a,L(t).title)),B(e,n)}),B(e,t)};H(c,e=>{Z.rateLimitsLoading?e(l):Z.rateLimitsAvailable?e(d,-1):e(u,1)});var f=F(c,2),p=N(f),m=F(p,2),h=e=>{var t=Nj();R(`click`,t,()=>{Z.closeRateLimitInspector(),Xo.navigate(`rate-limits`)}),B(e,t)},g=k(()=>Z.rateLimitsEnabled());H(m,e=>{L(g)&&e(h)}),E(f),E(n),I(()=>V(s,Z.rateLimitInspector.title)),R(`click`,p,()=>Z.closeRateLimitInspector()),B(e,n)},$$slots:{default:!0}}),O()}Vr([`click`]);var Ij=z(`
        models
        `),Lj=z(`
        Virtual models feature is unavailable.
        `),Rj=z(`
        `),zj=z(``),Bj=z(`
        `),Vj=z(``),Hj=z(`
        `),Uj=z(`

        No models registered.

        `),Wj=z(`

        No models in this category.

        `),Gj=z(`

        No models match your filter.

        `),Kj=z(`
        `);function qj(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`models`&&(fk.fetchVirtualModels(),Nk.fetchModelPricingOverrides(),Q.fetchFailoverRules(),Z.fetchRateLimitsPage())}),kn(()=>{let e=fk.filteredDisplayModels.length;return Tr(()=>fk.restartModelRendering(e)),()=>fk.stopModelRendering()});let n=k(()=>J.needsAuth);var r=Kj(),i=N(r),a=F(N(i),2),o=e=>{var t=Ij(),n=N(t),r=N(n,!0);E(n),He(),E(t),I(()=>V(r,Wc.filter?fk.filteredDisplayModels.length+` / `+fk.displayModels.length:fk.displayModels.length)),B(e,t)};H(a,e=>{fk.displayModels.length>0&&e(o)}),E(i);var s=F(i,2);Kc(s,{});var c=F(s,2),l=e=>{B(e,Lj())};H(c,e=>{!fk.virtualModelsAvailable&&!L(n)&&e(l)});var u=F(c,2),d=e=>{var t=Rj(),n=N(t,!0);E(t),I(()=>V(n,fk.aliasError)),B(e,t)};H(u,e=>{fk.aliasError&&!L(n)&&e(d)});var f=F(u,2),p=e=>{var t=Rj(),n=N(t,!0);E(t),I(()=>V(n,Nk.modelPricingOverrideError)),B(e,t)};H(f,e=>{Nk.modelPricingOverrideError&&!L(n)&&!Nk.modelPricingOverrideFormOpen&&e(p)});var m=F(f,2),h=e=>{var t=Bj();U(t,21,()=>Wc.categories,e=>e.category,(e,t)=>{var n=zj();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(n),I(()=>{r=W(n,1,`category-tab svelte-scpjps`,null,r,{active:Wc.activeCategory===L(t).category}),V(a,L(t).display_name),V(s,L(t).count)}),R(`click`,n,()=>Wc.selectCategory(L(t).category)),B(e,n)}),E(t),B(e,t)};H(m,e=>{Wc.categories.length>0&&e(h)});var g=F(m,2),_=e=>{var t=Hj(),n=N(t);jw(N(n),{placeholder:`Filter by provider, provider/model, alias, or owner...`,label:`Filter models by provider, provider/model, alias, or owner`,get value(){return Wc.filter},set value(e){Wc.filter=e}}),E(n);var r=F(n,2),i=N(r),a=e=>{var t=Vj();q(N(t),{get icon(){return mo},class:`alias-create-icon`}),He(2),E(t),R(`click`,t,()=>fk.openVirtualModelCreate()),B(e,t)};H(i,e=>{fk.virtualModelsAvailable&&e(a)}),E(r),E(t),B(e,t)};H(g,e=>{(fk.displayModels.length>0||Wc.filter||fk.virtualModelsAvailable)&&e(_)});var v=F(g,2),y=e=>{{let t=k(()=>fk.modelLoadingText());ET(e,{get label(){return L(t)},class:`models-loading-state`})}},b=k(()=>fk.modelsBusy()&&!L(n));H(v,e=>{L(b)&&e(y)});var x=F(v,2);XA(x,{});var S=F(x,2);sj(S,{});var C=F(S,2),w=e=>{AA(e,{})};H(C,e=>{(fk.displayModels.length>0||Wc.filter)&&e(w)});var T=F(C,2),ee=e=>{B(e,Uj())};H(T,e=>{fk.displayModels.length===0&&!Wc.loading&&!L(n)&&!Wc.filter&&(Wc.activeCategory===`all`||!Wc.activeCategory)&&e(ee)});var te=F(T,2),ne=e=>{B(e,Wj())};H(te,e=>{fk.displayModels.length===0&&!Wc.loading&&!L(n)&&!Wc.filter&&Wc.activeCategory&&Wc.activeCategory!==`all`&&e(ne)});var re=F(te,2),ie=e=>{B(e,Gj())};H(re,e=>{fk.displayModels.length>0&&fk.filteredDisplayModels.length===0&&Wc.filter&&e(ie)});var ae=F(re,2);Fj(ae,{});var oe=F(ae,2);qD(oe,{});var se=F(oe,2);hj(se,{}),wj(F(se,2),{}),E(r),B(e,r),O()}Vr([`click`]);var Jj=`draft-workflow-preview`;function Yj(){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 Xj(){return{scope_provider:``,scope_model:``,scope_user_path:``}}function Zj(e){return{ref:``,step:Number.isFinite(e)?e:10}}function Qj(e){let t=e==null?``:String(e).trim();if(t===``)return NaN;let n=Number(t);return Number.isFinite(n)?n:NaN}function $j(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 eM(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 tM(e){return{cache:!!$j(e,`cache`,!1),audit:!!$j(e,`audit`,!1),usage:!!$j(e,`usage`,!1),budget:$j(e,`budget`,!0)!==!1,guardrails:!!$j(e,`guardrails`,!1),failover:$j(e,`failover`,!0)!==!1}}function nM(e,t){let n=tM(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 rM(e,t){let n=e&&e.workflow_payload&&e.workflow_payload.features?e.workflow_payload.features:e&&e.features?e.features:{};return{...nM((e&&e.effective_features&&typeof e.effective_features==`object`&&!Array.isArray(e.effective_features)?e.effective_features:null)||n,t),failover:tM(n).failover}}function iM(e,t){return rM(e,t).failover?`On`:`Off`}function aM(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:Qj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0)}function oM(e,t){return rM(e,t).guardrails&&Array.isArray(e&&e.workflow_payload&&e.workflow_payload.guardrails)?e.workflow_payload.guardrails:[]}function sM(e){return String(e&&(e.scope_provider_name||e.scope_provider)||``).trim()}function cM(e){return String(e&&(e.provider_name||e.provider_type)||``).trim()}function lM(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=cM(e);t&&n.add(t)}),[...n].sort()}function uM(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&&cM(e)!==r)return;let t=String(e&&e.model&&e.model.id||``).trim();t&&i.add(t)}),[...i].sort()}function dM(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 fM(e){return String(e&&e.scope_display||`global`).trim()||`global`}function pM(e){let t=String(e&&e.name||``).trim();if(t)return t;let n=fM(e);return n===`global`?`All models`:n}function mM(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 hM(e){if(mM(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 gM(e){let t=e||Yj(),n=String(t.scope_provider||``).trim(),r=hM(t.scope_user_path);return{scope_provider:n,scope_model:n?String(t.scope_model||``).trim():``,scope_user_path:r}}function _M(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=hM(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 vM(e){let t=String(e&&e.scope_provider||``).trim(),n=t?String(e&&e.scope_model||``).trim():``,r=hM(e&&e.scope_user_path),i=_M({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 yM(e,t){let n=t||Xj(),r=sM(e&&e.scope),i=r?String(e&&e.scope&&e.scope.scope_model||``).trim():``,a=hM(e&&e.scope&&e.scope.scope_user_path);return r===String(n.scope_provider||``).trim()&&i===String(n.scope_model||``).trim()&&a===hM(n.scope_user_path)}function bM(e,t,n){let r=gM(t);return!(r.scope_provider!==``||r.scope_model!==``||r.scope_user_path!==``)&&!n?null:(Array.isArray(e)?e:[]).find(e=>yM(e,r))||null}function xM(e){return String(e&&e.scope_type||``).trim()!==`global`}function SM(e){let t=String(e||``).trim();return t?t.length<=14?t:t.slice(0,12)+`…`:`—`}function CM(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,sM(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 wM(e,t){let n=e||Yj(),r=gM(n),i=tM(n.features||{}),a=nM(i,t);a.failover=i.failover;let o=!!a.guardrails,s=o?aM(n):[];return{id:Jj,scope_type:_M(r),scope_display:vM(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||Yj(),o=String(a.scope_provider||``).trim(),s=o?String(a.scope_model||``).trim():``,c=hM(a.scope_user_path),l=tM(a.features||{}),u=nM(l,t),d=bM(n,a,r),f=d&&d.workflow_payload&&d.workflow_payload.features,p=eM(f,`failover`),m=p?$j(f,`failover`,!0)!==!1:null,h=i||Xj(),g=String(h.scope_provider||``).trim()===o&&String(h.scope_model||``).trim()===s&&hM(h.scope_user_path)===hM(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:Qj(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 EM(e,{models:t=[],hydratedScope:n=null}={}){let r=n||Xj(),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&&!lM(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=uM(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=mM(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 DM=new class{#e=A(M([]));get workflows(){return L(this.#e)}set workflows(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get submitting(){return L(this.#o)}set submitting(e){j(this.#o,e,!0)}#s=A(``);get deactivatingID(){return L(this.#s)}set deactivatingID(e){j(this.#s,e,!0)}#c=A(``);get formError(){return L(this.#c)}set formError(e){j(this.#c,e,!0)}#l=A(!1);get formHydrated(){return L(this.#l)}set formHydrated(e){j(this.#l,e,!0)}#u=A(M(Xj()));get hydratedScope(){return L(this.#u)}set hydratedScope(e){j(this.#u,e,!0)}#d=A(M([]));get guardrailRefs(){return L(this.#d)}set guardrailRefs(e){j(this.#d,e,!0)}#f=A(M(Yj()));get form(){return L(this.#f)}set form(e){j(this.#f,e,!0)}#p=null;failoverVisible(){return As.booleanFlag(`FAILOVER_ENABLED`,!0)}featureCaps(){return{cache:As.cacheVisible(),audit:As.auditVisible(),usage:As.usageVisible(),budget:As.budgetsVisible(),guardrails:As.guardrailsVisible(),failover:this.failoverVisible()}}get filteredWorkflows(){return CM(this.workflows,this.filter)}providerOptions(){return lM(Wc.models,this.hydratedScope)}modelOptions(e){return uM(Wc.models,e,this.hydratedScope)}activeScopeMatch(){return bM(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 wM(this.form,this.featureCaps())}openCreate(e){if(this.formOpen=!0,this.submitting=!1,this.formError=``,!e){this.formHydrated=!1,this.hydratedScope=Xj(),this.form=Yj();return}this.formHydrated=!0,this.hydratedScope={scope_provider:sM(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?tM(e.workflow_payload.features):rM(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:Qj(e&&e.step)})).filter(e=>Number.isInteger(e.step)&&e.step>=0):aM(e);this.form={scope_provider:sM(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=Xj(),this.form=Yj()}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(Zj(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 kT(`/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 kT(`/admin/workflows/guardrails`,{label:`workflow guardrails`});e.status!==`stale`&&(this.guardrailRefs=e.items)}async fetchPage(){await Promise.all([As.ensureLoaded(),this.fetchWorkflows(),this.fetchGuardrailRefs()])}async submitForm(){if(this.submitting)return;this.formError=``;let e=this.buildRequest(),t=EM(e,{models:Wc.models,hydratedScope:this.hydratedScope});if(t){this.formError=t;return}this.submitting=!0;try{let t=await AT(`/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}Y.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||!xM(e))return;let n=pM(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 AT(`/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`){Y.error(e.error);return}Y.success(`Workflow deactivated.`),this.fetchPage()}finally{this.deactivatingID=``}}}};function OM(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 kM({resetDelayMs:e=2e3,logPrefix:t}={}){let n=M({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 OM(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 AM=z(``);function jM(e,t){D(t,!0);let n=K(t,`workflowID`,3,``),r=kM({logPrefix:`Failed to copy workflow ID:`});kn(()=>{n(),r.reset()});let i=k(()=>r.error?`Unable to copy workflow ID`:r.copied?`Workflow ID copied`:`Copy workflow ID`),a=k(()=>n()?L(i)+` `+n():L(i));async function o(e){e.preventDefault(),n()&&await r.copy(n())}var s=AM();let c;var l=F(N(s),4),u=N(l,!0);E(l);var d=F(l,2);q(N(d),{get icon(){return Ya}}),E(d),E(s),I(()=>{c=W(s,1,`workflow-pipeline-meta mono svelte-1viff7o`,null,c,{"workflow-pipeline-meta-copied":r.copied,"workflow-pipeline-meta-error":r.error}),G(s,`title`,L(i)),G(s,`aria-label`,L(a)),V(u,n())}),R(`click`,s,o),B(e,s),O()}Vr([`click`]);var MM=(e,t)=>{let n=()=>(t?.()).icon,r=()=>(t?.()).label,i=Dt(()=>h((t?.()).variant,`workflow-node-feature`)),a=()=>(t?.()).state,o=()=>(t?.()).sub,s=()=>(t?.()).badge;var c=IM(),l=N(c),u=e=>{var t=NM();let r;q(N(t),{get icon(){return n()}}),E(t),I(()=>r=W(t,1,`workflow-node-icon svelte-nbptrg`,null,r,{"workflow-node-icon-endpoint":L(i)===`workflow-node-endpoint`})),B(e,t)};H(l,e=>{n()&&e(u)});var d=F(l,2),f=N(d,!0);E(d);var p=F(d,2),m=e=>{var t=PM(),n=N(t,!0);E(t),I(()=>V(n,s())),B(e,t)};H(p,e=>{s()&&e(m)});var g=F(p,2),_=e=>{var t=FM(),n=N(t,!0);E(t),I(()=>V(n,o())),B(e,t)};H(g,e=>{o()&&e(_)}),E(c),I(()=>{W(c,1,Pi([`workflow-node`,L(i),a()]),`svelte-nbptrg`),V(f,r())}),B(e,c)},NM=z(`
        `),PM=z(` `),FM=z(` `),IM=z(`
        `),LM=z(`
        `,1),RM=z(`
        `,1),zM=z(`
        `),BM=z(`
        Async
        `),VM=z(`
        `);function HM(e,t){D(t,!0);let n=K(t,`chart`,19,()=>({}));var r=VM();let i;var a=N(r),o=e=>{jM(e,{get workflowID(){return n().workflowID}})};H(a,e=>{n().workflowID&&e(o)});var s=F(a,2),c=N(s);MM(c,()=>({icon:Po,label:`Client`,variant:`workflow-node-endpoint`}));var l=F(c,4);MM(l,()=>({icon:Za,label:`Auth`,state:n().authNodeClass,sub:n().authNodeSublabel}));var u=F(l,2),d=e=>{var t=LM(),r=P(t);MM(F(r,2),()=>({icon:Za,label:`Cache`,state:n().cacheNodeClass,badge:n().cacheStatusLabel})),I(()=>W(r,1,Pi([`workflow-conn`,n().cacheConnClass]),`svelte-nbptrg`)),B(e,t)};H(u,e=>{n().showCache&&e(d)});var f=F(u,2),p=e=>{var t=RM();MM(F(P(t),2),()=>({icon:Fo,label:`Budget`,state:n().budgetNodeClass,badge:n().budgetStatusLabel})),B(e,t)};H(f,e=>{n().showBudget&&e(p)});var m=F(f,2),h=e=>{var t=RM();MM(F(P(t),2),()=>({icon:Eo,label:`Guardrails`,sub:n().guardrailLabel})),B(e,t)};H(m,e=>{n().showGuardrails&&e(h)});var g=F(m,2),_=F(g,2);MM(_,()=>({label:n().aiLabel,variant:`workflow-node-ai`,state:n().aiNodeClass,sub:n().aiSublabel}));var v=F(_,2),y=e=>{var t=LM(),r=P(t);MM(F(r,2),()=>({icon:so,label:`Failover`,state:n().failoverNodeClass,badge:n().failoverStatusLabel,sub:n().failoverTargetLabel})),I(()=>W(r,1,Pi([`workflow-conn`,n().failoverConnClass]),`svelte-nbptrg`)),B(e,t)};H(v,e=>{n().showFailover&&e(y)});var b=F(v,2);MM(F(b,2),()=>({icon:Ga,label:`Response`,variant:`workflow-node-endpoint`,state:n().responseNodeClass,sub:n().responseNodeSublabel})),E(s);var x=F(s,2),S=e=>{var t=BM(),r=N(t),i=N(r),a=e=>{MM(e,()=>({icon:za,label:`Usage`,variant:`workflow-node-feature workflow-node-async`,state:n().usageNodeClass}))};H(i,e=>{n().showUsage&&e(a)});var o=F(i,2),s=e=>{B(e,zM())};H(o,e=>{n().showUsage&&n().showAudit&&e(s)});var c=F(o,2),l=e=>{MM(e,()=>({icon:Qa,label:`Audit Log`,variant:`workflow-node-feature workflow-node-async`,state:n().auditNodeClass}))};H(c,e=>{n().showAudit&&e(l)}),E(r),He(4),E(t),B(e,t)};H(x,e=>{n().showAsync&&e(S)}),E(r),I(()=>{i=W(r,1,`workflow-pipeline svelte-nbptrg`,null,i,{"workflow-pipeline-has-meta":n().workflowID}),W(g,1,Pi([`workflow-conn`,n().aiConnClass]),`svelte-nbptrg`),W(b,1,Pi([`workflow-conn`,n().responseConnClass]),`svelte-nbptrg`)}),B(e,r),O()}function UM(e){let t=aM(e).length;return t===0?``:t===1?`1 step`:t+` steps`}function WM(e,t){return t&&t.provider?t.provider:sM(e&&e.scope)||`AI`}function GM(e,t){return t&&t.model?t.model:e&&e.scope&&e.scope.scope_model||null}function KM(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 qM(e){let t=e&&e.data&&e.data.workflow_features;return!t||typeof t!=`object`||Array.isArray(t)?null:tM(t)}function JM(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 YM(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 YM(JSON.parse(n),t+1)}catch{return``}}if(Array.isArray(e)){for(let n of e){let e=YM(n,t+1);if(e)return e}return``}return typeof e==`object`?String(e.code||``).trim()||(e.error===void 0?``:YM(e.error,t+1)):``}function XM(e){let t=e&&e.data&&typeof e.data==`object`&&!Array.isArray(e.data)?e.data:{};return String(t.error_code||t.errorCode||``).trim()||YM(t.response_body)}function ZM(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 QM(e,t){let n=String(e&&(e.requested_model||e.model)||``).trim(),r=JM(e);if(!(r&&r.targetModel))return{provider:String(e&&e.provider||``).trim()||null,model:n||null};let i=ZM(n);if(i)return i;let a=sM(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 $M(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=JM(e),o=QM(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=XM(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 eN(e){return!!(e&&e.cacheHit)}function tN(e){return!!(e&&e.failoverTarget)}function nN(e){return!!(e&&e.budgetExceeded)}function rN(e,t){return t?`workflow-node-current`:e&&e.cacheHit?`workflow-node-success`:``}function iN(e){return e&&e.cacheHit?`workflow-conn-hit`:``}function aN(e){return!e||!e.cacheHit?null:e.cacheType===`semantic`?`Hit (Semantic)`:`Hit (Exact)`}function oN(e,t,n,r){return e?nN(t)?`workflow-node-error`:r?`workflow-node-current`:n?`workflow-node-success`:``:``}function sN(e){return nN(e)?`Exceeded`:null}function cN(e){return e&&e.cacheHit?`workflow-node-skipped`:e&&e.failoverTarget?`workflow-node-success`:``}function lN(e){return e&&e.cacheHit?`workflow-conn-dim`:e&&e.failoverTarget?`workflow-conn-hit`:``}function uN(e){return e&&e.failoverTarget?`Redirected`:null}function dN(e){return e&&e.failoverTarget?e.failoverTarget:null}function fN(e){return e&&e.cacheHit?`workflow-conn-dim`:``}function pN(e,t){return e?e.cacheHit?`workflow-node-skipped`:t?`workflow-node-current`:e.aiSuccess?`workflow-node-success`:``:``}function mN(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 hN(e){return!e||!Number.isFinite(e.statusCode)?null:String(e.statusCode)}function gN(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 _N(e){return!e||!e.authMethod?null:e.authMethod}function vN(e,t,n){return e?n?`workflow-node-current`:t?`workflow-node-success`:``:``}function yN(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 bN(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 xN(e){return!!(e&&e._live&&e._usage_live_pending&&!e._usage_flushed)}function SN(e,t){return!e||!e._live||yN(e,!1)?!1:String(e._live_state||``).trim()===`audit.completed`||!!(t&&Number.isFinite(t.statusCode))}function CN(e,t,n){return!e||!e._live?``:xN(e)?`usage`:SN(e,t)?`audit`:yN(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 wN(e,t,n,r){let i=n||{},a=i.features&&typeof i.features==`object`&&!Array.isArray(i.features)?tM(i.features):rM(e,r),o=!!i.forceAudit,s=!!i.highlightAsyncPresent,c=!!a.budget||nN(t),l=!!a.guardrails,u=!!a.usage,d=o||!!a.audit,f=!!i.forceAsync||!!(u||d),p=!!a.failover||tN(t),m=KM(e,i.entry),h=CN(i.entry,t,a),g=xN(i.entry),_=SN(i.entry,t),v=yN(i.entry,s),y=bN(i.entry,s);return{showBudget:c,budgetNodeClass:oN(c,t,s,h===`budget`),budgetStatusLabel:sN(t),showGuardrails:l,guardrailLabel:l?UM(e):``,showCache:!!i.forceCache||!!a.cache||eN(t),cacheNodeClass:rN(t,h===`cache`),cacheConnClass:iN(t),cacheStatusLabel:aN(t),showFailover:p,failoverNodeClass:p?cN(t):``,failoverConnClass:p?lN(t):``,failoverStatusLabel:p?uN(t):null,failoverTargetLabel:p?dN(t):null,aiLabel:WM(e,t),aiSublabel:GM(e,t),aiConnClass:fN(t),aiNodeClass:pN(t,h===`ai`),responseConnClass:fN(t),responseNodeClass:mN(t,h===`response`),responseNodeSublabel:hN(t),authNodeClass:gN(t,h===`auth`),authNodeSublabel:_N(t),usageNodeClass:vN(u,y,g),auditNodeClass:vN(d,v,_),showAsync:f,showUsage:u,showAudit:d,workflowID:m}}function TN(e,t){return wN(e,null,{forceCache:!1},t)}function EN(e,t,n){return wN(t,$M(e,t),{entry:e,features:qM(e)||(t?rM(t,n):{cache:!1,audit:!1,usage:!1,budget:!1,guardrails:!1,failover:!1}),forceAudit:!0,forceAsync:!0,highlightAsyncPresent:!0},n)}var DN=z(`

        `),ON=z(`

        `),kN=z(`
        `),AN=z(`
        `),jN=z(`

        No guardrails configured for this workflow.

        `),MN=z(`

        Guardrails

        `),NN=z(``),PN=z(`

        `);function FN(e,t){D(t,!0);let n=K(t,`preview`,3,!1),r=k(()=>DM.featureCaps()),i=k(()=>pM(t.workflow)),a=k(()=>oM(t.workflow,L(r))),o=k(()=>TN(t.workflow,L(r))),s=k(()=>n()?`draft-workflow-preview-guardrail-`:t.workflow.id+`-guardrail-`);var c=PN();let l;var u=N(c),d=N(u),f=N(d),p=N(f,!0);E(f);var m=F(f,2),h=N(m,!0);E(m),E(d);var g=F(d,2),_=N(g),v=N(_,!0);E(_),E(g),E(u);var y=F(u,2),b=e=>{var n=DN(),r=N(n,!0);E(n),I(()=>V(r,t.workflow.description)),B(e,n)};H(y,e=>{t.workflow.description&&e(b)});var x=F(y,2),S=e=>{var n=ON(),i=N(n);E(n),I(e=>V(i,`Failover: ${e??``}`),[()=>iM(t.workflow,L(r))]),B(e,n)},C=k(()=>DM.failoverVisible());H(x,e=>{L(C)&&e(S)});var w=F(x,2);HM(w,{get chart(){return L(o)}});var T=F(w,2),ee=e=>{var t=MN(),n=N(t),r=F(N(n),2),i=N(r,!0);E(r),E(n);var o=F(n,2),c=e=>{var t=AN();U(t,23,()=>L(a),(e,t)=>L(s)+t,(e,t)=>{var n=kN(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=N(a);E(a),E(n),I(()=>{V(i,L(t).ref),V(o,`step ${L(t).step??``}`)}),B(e,n)}),E(t),B(e,t)},l=e=>{B(e,jN())};H(o,e=>{L(a).length>0?e(c):e(l,-1)}),E(t),I(()=>V(i,L(a).length?L(a).length+` steps`:`None`)),B(e,t)},te=k(()=>As.guardrailsVisible());H(T,e=>{L(te)&&e(ee)});var ne=F(T,2),re=e=>{var n=NN(),r=N(n),a=N(r),o=N(a,!0);E(a);var s=F(a,2);{let e=k(()=>`Edit workflow `+L(i));OT(s,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>DM.openCreate(t.workflow),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}E(r);var c=F(r,2),l=N(c),u=N(l);E(l);var d=F(l,2),f=N(d);E(d);var p=F(d,2),m=N(p);E(p),E(c),E(n),I((e,n,r,s)=>{a.disabled=e,G(a,`aria-label`,`Deactivate workflow `+L(i)),G(a,`title`,n),V(o,DM.deactivatingID===t.workflow.id?`Deactivating...`:`Deactivate`),V(u,`version: v${t.workflow.version??``}`),V(f,`created: ${r??``}`),V(m,`hash: ${s??``}`)},[()=>DM.deactivatingID===t.workflow.id||!xM(t.workflow),()=>xM(t.workflow)?`Deactivate active workflow`:`The global workflow cannot be deactivated.`,()=>ys.formatTimestamp(t.workflow.created_at),()=>SM(t.workflow.workflow_hash)]),R(`click`,a,()=>DM.deactivate(t.workflow)),B(e,n)};H(ne,e=>{n()||e(re)}),E(c),I((e,t)=>{l=W(c,1,`workflow-card svelte-1fo9fvq`,null,l,{"workflow-preview-card":n()}),V(p,e),V(h,L(i)),V(v,t)},[()=>dM(t.workflow),()=>fM(t.workflow)]),B(e,c),O()}Vr([`click`]);var IN=z(`

        `),LN=z(``),RN=z(``),zN=z(``),BN=z(``),VN=z(``),HN=z(``),UN=z(``),WN=z(``),GN=z(``),KN=z(``),qN=z(``),JN=z(``),YN=z(`
        No named guardrails are currently registered on this deployment. You can still draft a workflow, but guardrail-backed creation may be rejected.
        `),XN=z(`
        `),ZN=z(`
        `),QN=z(`

        No guardrail steps configured yet.

        `),$N=z(`

        Guardrail Steps

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

        `),eP=z(`

        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 tP(e,t){D(t,!0);{let t=e=>{iC(e,{copyId:`workflow-help-copy`,label:`workflow help`,text:`Create immutable version. Submitting activates it for the selected scope.`,title:e=>{var t=IN(),n=N(t,!0);E(t),I(e=>V(n,e),[()=>DM.submitMode()===`save`?`Edit Workflow`:`Create Workflow`]),B(e,t)},$$slots:{title:!0}})},n=k(()=>DM.submitLabel()),r=k(()=>DM.submittingLabel()),i=k(()=>DM.submitMode()===`create`?mo:vo);ME(e,{get open(){return DM.formOpen},ariaLabel:`Workflow editor`,get error(){return DM.formError},get submitting(){return DM.submitting},get submitLabel(){return L(n)},get submittingLabel(){return L(r)},get submitIcon(){return L(i)},dialogClass:`workflow-editor`,onclose:()=>DM.closeForm(),onsubmit:()=>DM.submitForm(),header:t,children:(e,t)=>{var n=eP(),r=P(n),i=N(r);PE(i,{id:`workflow-scope-provider`,label:`Provider Name`,children:(e,t)=>{var n=RN(),r=N(n);r.value=r.__value=``,U(F(r),16,()=>DM.providerOptions(),e=>e,(e,t)=>{var n=LN(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(n),R(`change`,n,e=>DM.setProvider(e.currentTarget.value)),Wi(n,()=>DM.form.scope_provider,e=>DM.form.scope_provider=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2),o=e=>{PE(e,{id:`workflow-scope-model`,label:`Model`,children:(e,t)=>{var n=zN(),r=N(n);r.value=r.__value=``,U(F(r),17,()=>DM.modelOptions(DM.form.scope_provider),e=>DM.form.scope_provider+`-`+e,(e,t)=>{var n=LN(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t)),i!==(i=L(t))&&(n.value=(n.__value=L(t))??``)}),B(e,n)}),E(n),Wi(n,()=>DM.form.scope_model,e=>DM.form.scope_model=e),B(e,n)},$$slots:{default:!0}})};H(a,e=>{DM.form.scope_provider&&e(o)});var s=F(a,2);PE(s,{id:`workflow-name`,label:`Name`,children:(e,t)=>{var n=BN();ta(n),ua(n,()=>DM.form.name,e=>DM.form.name=e),B(e,n)},$$slots:{default:!0}}),PE(F(s,2),{id:`workflow-user-path`,label:`User Path`,children:(e,t)=>{var n=VN();ta(n),ua(n,()=>DM.form.scope_user_path,e=>DM.form.scope_user_path=e),B(e,n)},$$slots:{default:!0}}),E(r);var c=F(r,8);PE(c,{id:`workflow-description`,label:`Description`,children:(e,t)=>{var n=HN();dt(n),ua(n,()=>DM.form.description,e=>DM.form.description=e),B(e,n)},$$slots:{default:!0}});var l=F(c,2),u=N(l),d=e=>{var t=UN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.cache,e=>DM.form.features.cache=e),B(e,t)},f=k(()=>As.cacheVisible());H(u,e=>{L(f)&&e(d)});var p=F(u,2),m=e=>{var t=WN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.audit,e=>DM.form.features.audit=e),B(e,t)},h=k(()=>As.auditVisible());H(p,e=>{L(h)&&e(m)});var g=F(p,2),_=e=>{var t=GN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.usage,e=>DM.form.features.usage=e),B(e,t)},v=k(()=>As.usageVisible());H(g,e=>{L(v)&&e(_)});var y=F(g,2),b=e=>{var t=KN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.budget,e=>DM.form.features.budget=e),B(e,t)},x=k(()=>As.budgetsVisible());H(y,e=>{L(x)&&e(b)});var S=F(y,2),C=e=>{var t=qN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.guardrails,e=>DM.form.features.guardrails=e),B(e,t)},w=k(()=>As.guardrailsVisible());H(S,e=>{L(w)&&e(C)});var T=F(S,2),ee=e=>{var t=JN(),n=N(t);ta(n),He(2),E(t),da(n,()=>DM.form.features.failover,e=>DM.form.features.failover=e),B(e,t)},te=k(()=>DM.failoverVisible());H(T,e=>{L(te)&&e(ee)}),E(l);var ne=F(l,2),re=F(N(ne),2);{let e=k(()=>DM.preview());FN(re,{get workflow(){return L(e)},preview:!0})}E(ne);var ie=F(ne,2),ae=e=>{var t=$N(),n=N(t),r=F(N(n),2);E(n);var i=F(n,2),a=e=>{var t=YN(),n=F(N(t),2);E(t),R(`click`,n,()=>Xo.navigate(`guardrails`)),B(e,t)};H(i,e=>{DM.guardrailRefs.length===0&&e(a)});var o=F(i,2),s=e=>{var t=ZN();U(t,21,()=>DM.form.guardrails,ai,(e,t,n)=>{var r=XN(),i=N(r),a=N(i);G(a,`for`,`workflow-guardrail-ref-`+n);var o=F(a,2);ta(o),G(o,`id`,`workflow-guardrail-ref-`+n),G(o,`aria-label`,`Guardrail reference `+(n+1)),E(i);var s=F(i,2),c=N(s);G(c,`for`,`workflow-guardrail-step-`+n);var l=F(c,2);ta(l),G(l,`id`,`workflow-guardrail-step-`+n),G(l,`aria-label`,`Guardrail step `+(n+1)),E(s);var u=F(s,2);E(r),ua(o,()=>L(t).ref,e=>L(t).ref=e),ua(l,()=>L(t).step,e=>L(t).step=e),R(`click`,u,()=>DM.removeGuardrailStep(n)),B(e,r)}),E(t),B(e,t)},c=e=>{B(e,QN())};H(o,e=>{DM.form.guardrails.length>0?e(s):e(c,-1)}),E(t),R(`click`,r,()=>DM.addGuardrailStep()),B(e,t)},oe=k(()=>DM.form.features.guardrails&&As.guardrailsVisible());H(ie,e=>{L(oe)&&e(ae)}),B(e,n)},$$slots:{header:!0,default:!0}})}O()}Vr([`change`,`click`]);var nP=z(`

        Loading workflows...

        `),rP=z(`
        `),iP=z(`

        No active workflows found.

        `),aP=z(`

        No workflows match your filter.

        `),oP=z(`
        `);function sP(e,t){D(t,!0);var n=oP(),r=N(n),i=e=>{var t=nP();NS(N(t),{size:16,label:`Loading workflows`}),He(),E(t),B(e,t)};H(r,e=>{DM.loading&&!J.authError&&e(i)});var a=F(r,2),o=e=>{var t=rP();U(t,21,()=>DM.filteredWorkflows,e=>e.id,(e,t)=>{FN(e,{get workflow(){return L(t)}})}),E(t),B(e,t)};H(a,e=>{DM.filteredWorkflows.length>0&&e(o)});var s=F(a,2),c=e=>{B(e,iP())};H(s,e=>{DM.workflows.length===0&&!DM.loading&&!J.authError&&DM.available&&e(c)});var l=F(s,2),u=e=>{B(e,aP())};H(l,e=>{DM.workflows.length>0&&DM.filteredWorkflows.length===0&&!DM.loading&&e(u)}),E(n),B(e,n),O()}var cP=z(``),lP=z(`
        Workflows feature is unavailable.
        `),uP=z(`
        `),dP=z(`
        `),fP=z(``),pP=z(`
        `);function mP(e,t){D(t,!0),kn(()=>{J.refreshTick,DM.fetchPage()});var n=pP(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=cP();q(N(t),{get icon(){return mo},class:`form-action-icon`,"aria-hidden":`true`}),He(2),E(t),R(`click`,t,()=>DM.openCreate()),B(e,t)};H(a,e=>{DM.available&&e(o)}),E(i),E(r);var s=F(r,2),c=e=>{B(e,lP())};H(s,e=>{!DM.available&&!J.authError&&e(c)});var l=F(s,2),u=e=>{var t=uP(),n=N(t,!0);E(t),I(()=>V(n,DM.error)),B(e,t)};H(l,e=>{DM.error&&!J.authError&&e(u)});var d=F(l,2),f=e=>{var t=dP(),n=N(t);jw(N(n),{placeholder:`Filter by scope, name, hash, or guardrail...`,label:`Filter workflows by scope, name, hash, or guardrail`,get value(){return DM.filter},set value(e){DM.filter=e}}),E(n);var r=F(n,2),i=N(r),a=N(i,!0);E(i),E(r),E(t),I(()=>V(a,DM.filteredWorkflows.length+` active scopes`)),B(e,t)};H(d,e=>{DM.available&&e(f)});var p=F(d,2);tP(p,{});var m=F(p,2);sP(m,{});var h=F(m,2);U(h,20,()=>DM.guardrailRefs,e=>e,(e,t)=>{var n=fP(),r={};I(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(h),E(n),B(e,n),O()}Vr([`click`]);function hP(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=sc}=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=gP(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 gP(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 _P=null;function vP(){return _P===null&&(_P=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`)),!!(_P&&_P.matches)}function yP(e){return vP()?0:e}function bP(e,t){return!t||!t.live?{duration:0}:ac(e,{duration:yP(150)})}var xP=new class{#e=A(M({}));get workflowVersionsByID(){return L(this.#e)}set workflowVersionsByID(e){j(this.#e,e,!0)}workflowVersionRequests={};workflowFeatureCaps(){return{cache:As.cacheVisible(),audit:As.auditVisible(),usage:As.usageVisible(),budget:As.budgetsVisible(),guardrails:As.guardrailsVisible(),failover:As.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 Ts(`/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}},SP=6;function CP(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}function wP(e,t=0,n=null){let r=String(e||``).trim();if(!r)return``;if(t>SP)return r;let i=CP(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>SP)return``;if(typeof e==`string`){let i=CP(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||OP(t&&t.response_body)}function AP(e){let t=e&&e.data?e.data:null;return t?EP(t.error_message)||(kP(e,t)?TP(t.response_body,0):``):``}function jP(e){if(e==null||String(e).trim()===``)return null;let t=Number(e);return!Number.isInteger(t)||t<0?null:t}function MP(e){let t=jP(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 NP(e){let t=jP(e);return t===null?``:t===0?`Audit logs are retained `:`Audit logs are retained for `}function PP(e){let t=jP(e);return t===null?``:t===0?`indefinitely`:t===1?`1 day`:t+` days`}function FP({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 IP({sessionId:e,limit:t}){return`session_id=`+encodeURIComponent(e)+`&limit=`+(t||100)+`&offset=0`}function LP(e){return String(e&&e.session_id||``).trim()}function RP(e){let t=Number(e&&e.session_count);return Number.isFinite(t)&&t>1?t:1}function zP(e){return!!LP(e)&&RP(e)>1}function BP(e){return{entries:(Array.isArray(e&&e.sessions)?e.sessions:[]).filter(e=>e&&e.latest).map(e=>({...e.latest,session_id:LP(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 VP(e,t,n){let r=new Set((Array.isArray(n)?n:[]).flatMap(e=>GP(e))),i=(Array.isArray(t)?t:[]).filter(e=>!GP(e).some(e=>r.has(e))),a=new Set([...r,...i.flatMap(e=>GP(e))]),o=(e&&Array.isArray(e.entries)?e.entries:[]).filter(e=>e&&e._live&&!GP(e).some(e=>a.has(e)));return{entries:[...o,...i],preservedCount:o.length}}function HP(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 UP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>LP(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 WP(e){return String(e&&e.id||``).trim()}function GP(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 KP(e){return!!(e&&e._live&&e._live_pending&&!e._audit_flushed)}function qP(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 JP(e,t){return e&&Number(e.offset||0)===0&&!(t&&t.search)&&!(t&&t.method)&&!(t&&t.statusCode)&&!(t&&t.stream)&&qP(t)}function YP(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,!JP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>KP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>GP(e))),s=[];return a.forEach(e=>{let t=GP(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 XP(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,!JP(r,n))return r;let a=(Array.isArray(t)?t:[]).filter(e=>KP(e));if(a.length===0)return r;let o=new Set(i.flatMap(e=>GP(e))),s=new Map;i.forEach((e,t)=>{let n=LP(e);n&&!s.has(n)&&s.set(n,t)});let c=[],l=i;return a.forEach(e=>{let t=GP(e);if(t.length===0||t.some(e=>o.has(e)))return;let n=LP(e);if(n&&s.has(n)){let r=s.get(n);l===i&&(l=[...i]),l[r]={...e,session_count:Math.max(RP(l[r]),RP(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 ZP(e,t){let n=WP(t),r=e||{};return n?r[n]?{}:{[n]:!0}:r}function QP(e,t){let n=e||{},r=new Set((Array.isArray(t)?t:[]).map(e=>WP(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 $P(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 eF(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 tF(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 nF(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 rF(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 iF(e){let t=rF(e);return t.length>1||t.some(e=>!(e&&e.success))}function aF(e){if(!e)return`-`;let t=e.status_code||e.status;return t?String(t):e.success?`ok`:`error`}function oF(e){return String(e&&e.kind||``).trim()||`attempt`}function sF(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 cF(e){return String(e&&e.model||``).trim()||`-`}function lF(e){let t=rF(e);return t.length>1||t.some(e=>!(e&&e.success))?t:[]}function uF(e){return rF(e).length+`×`}function dF(e){let t=rF(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 fF(e){if(!e)return``;let t=[`#`+Number(e.seq||0)],n=oF(e);n&&n!==`attempt`&&t.push(n),t.push(aF(e));let r=sF(e);r&&r!==`-`&&t.push(r);let i=cF(e);return i&&i!==`-`&&t.push(i),t.push(e.success?`succeeded`:`failed`),t.join(` · `)}function pF(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 mF(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 hF(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 gF(e){let t=Number(e&&e.status_code);return Number.isFinite(t)&&t>0?t:null}function _F(e,t){let n=!!(t&&t.success),r=e&&e.data?e.data:null,i=pF(e,t),a=hF(e,t),o=mF(t),s=i!=null&&i!==``,c=oF(t),l=rF(e).length<=1;return{title:`Response`,direction:`response`,seq:l?0:Number(t&&t.seq||0),kind:l||c===`attempt`?``:c,statusCode:l?null:gF(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 vF(e){return e&&e.data&&Array.isArray(e.data.request_revisions)?e.data.request_revisions:[]}function yF(e){return vF(e).filter(e=>!(e&&e.no_change))}function bF(e){return vF(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 xF(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 SF(e,t){let n=t&&t.body,r=n!=null&&n!==``,i=yF(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:xF(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 CF(e){let t=e&&e.usage;return!t||typeof t!=`object`?null:t}function wF(e){let t=CF(e);return Number(t&&t.cached_input_tokens||0)>0}function TF(e){let t=CF(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 EF(e){let t=CF(e);if(!t)return``;let n=Number(t.input_tokens||0),r=Number(t.cached_input_tokens||0);return n<=0?_c(r)+` cached`:TF(e).toFixed(1)+`% cached`}function DF(e){return wF(e)?EF(e):``}function OF(e,t){let n=CF(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 kF(e,t){let n=e&&e.data?e.data:null,r=!n||!n.request_headers&&!n.request_body,i=r&&tF(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:DF(e),promptCacheHighlight:OF(e,t),noChangeSteps:bF(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 AF(e){let t=e&&e.data?e.data:null,n=AP(e),r=!t||!n&&!t.response_headers&&!t.response_body,i=r&&tF(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)&&tF(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 jF(e,t){let n=[{id:`request`,pane:kF(e,t)}];return yF(e).forEach(t=>{n.push({id:`revision-`+Number(t&&t.seq||0),pane:SF(e,t)})}),iF(e)?rF(e).forEach(t=>{n.push({id:`response-`+Number(t&&t.seq||0),pane:_F(e,t)})}):n.push({id:`response`,pane:AF(e)}),n}function MF(e){if(!iF(e))return`response`;let t=rF(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 NF(e,t,n){return e&&(Array.isArray(n)?n:jF(t)).some(t=>t.id===e)?e:MF(t)}function PF(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 FF=100;function IF(){return{entries:[],total:0,limit:25,offset:0}}var LF=new class{#e=A(M({}));get auditExpandedEntries(){return L(this.#e)}set auditExpandedEntries(e){j(this.#e,e,!0)}#t=A(M({}));get auditExpandedThreads(){return L(this.#t)}set auditExpandedThreads(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}auditFetchToken=0;get auditLog(){return UC.auditLog}set auditLog(e){UC.auditLog=e}get auditSearch(){return UC.auditSearch}set auditSearch(e){UC.auditSearch=e}get auditMethod(){return UC.auditMethod}set auditMethod(e){UC.auditMethod=e}get auditStatusCode(){return UC.auditStatusCode}set auditStatusCode(e){UC.auditStatusCode=e}get auditStream(){return UC.auditStream}set auditStream(e){UC.auditStream=e}get auditGroupSessions(){return UC.auditGroupSessions}liveFilters(){return{search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate}}toggleAuditGroupSessions(){UC.auditGroupSessions=!UC.auditGroupSessions,wa(`gomodel_audit_group_sessions`,UC.auditGroupSessions),this.auditExpandedThreads={},UC.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=FP({dateQuery:Uc.queryStr(),limit:this.auditLog.limit,offset:this.auditLog.offset,search:this.auditSearch,method:this.auditMethod,statusCode:this.auditStatusCode,stream:this.auditStream}),i=await Ts((n?`/admin/audit/sessions?`:`/admin/audit/log?`)+r,{label:`audit log`});if(i.stale||t!==this.auditFetchToken)return;if(!i.ok){this.auditLog=IF();return}let a=n?BP(i.data):i.data,o=(n?XP:YP)(a,this.auditLog&&this.auditLog.entries,this.liveFilters());Array.isArray(o.entries)||(o.entries=[]),o.entries=UC.upsertAuditRecords(o.entries,`audit.list`),this.auditLog=o,this.auditExpandedThreads=UP(this.auditExpandedThreads,o.entries),UC.auditThreadChildren=UP(UC.auditThreadChildren,o.entries);let s=[...o.entries,...this.loadedThreadChildren()];this.auditExpandedEntries=QP(this.auditExpandedEntries,s);try{await xP.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=IF()}finally{t===this.auditFetchToken&&(this.loading=!1)}}loadedThreadChildren(){let e=UC.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&&UC.auditThreadChildren[e]||null}async toggleThread(e){let t=LP(e);if(!t)return;let n=!this.isThreadExpanded(t);this.auditExpandedThreads=HP(this.auditExpandedThreads,t);let r=UC.auditThreadChildren[t];n&&!(r&&(r.loaded||r.loading))&&await this.fetchThreadEntries(e)}async fetchThreadEntries(e){let t=LP(e);if(!t)return;let n=UC.auditThreadChildren[t];UC.auditThreadChildren={...UC.auditThreadChildren,[t]:{loading:!0,loaded:!1,entries:n&&Array.isArray(n.entries)?n.entries:[],total:Number(n&&n.total||0)}};let r=()=>{let e={...UC.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=HP(this.auditExpandedThreads,t))),UC.auditThreadChildren=e};try{let n=await Ts(`/admin/audit/log?`+IP({sessionId:t,limit:FF}),{label:`audit session`});if(n.stale){r();return}if(!n.ok)throw Error(`audit session fetch failed`);let i=UC.auditThreadChildren[t],a=this.auditLog.entries.find(e=>LP(e)===t),o=VP(i,n.data.entries,a?[a]:[e]);o.entries=UC.upsertAuditRecords(o.entries,`audit.thread`),UC.auditThreadChildren={...UC.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=WP(e);return t?!!(this.auditExpandedEntries&&this.auditExpandedEntries[t]):!1}toggleAuditEntryExpanded(e){this.auditExpandedEntries=ZP(this.auditExpandedEntries,e);let t=this.isAuditEntryExpanded(e);return t&&typeof UC.fetchAuditEntryDetail==`function`&&UC.fetchAuditEntryDetail(e),t}expandAuditEntry(e){this.isAuditEntryExpanded(e)||this.toggleAuditEntryExpanded(e)}};UC.fetchAuditLog=e=>LF.fetchAuditLog(e),UC.isAuditEntryExpanded=e=>LF.isAuditEntryExpanded(e);var RF=z(`
        `);function zF(e,t){D(t,!0);let n=Mw(()=>LF.fetchAuditLog(!0));kn(()=>n.cancel);var r=RF(),i=N(r);jw(N(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 LF.auditSearch},set value(e){LF.auditSearch=e}}),E(i);var a=F(i,2),o=N(a),s=N(o);s.value=s.__value=``;var c=F(s);c.value=c.__value=`GET`;var l=F(c);l.value=l.__value=`POST`;var u=F(l);u.value=u.__value=`PUT`;var d=F(u);d.value=d.__value=`PATCH`;var f=F(d);f.value=f.__value=`DELETE`,E(o);var p=F(o,2),m=N(p);m.value=m.__value=``;var h=F(m);h.value=h.__value=`200`;var g=F(h);g.value=g.__value=`201`;var _=F(g);_.value=_.__value=`400`;var v=F(_);v.value=v.__value=`401`;var y=F(v);y.value=y.__value=`403`;var b=F(y);b.value=b.__value=`404`;var x=F(b);x.value=x.__value=`429`;var S=F(x);S.value=S.__value=`500`;var C=F(S);C.value=C.__value=`502`;var w=F(C);w.value=w.__value=`503`;var T=F(w);T.value=T.__value=`504`,E(p);var ee=F(p,2),te=N(ee);te.value=te.__value=``;var ne=F(te);ne.value=ne.__value=`true`;var re=F(ne);re.value=re.__value=`false`,E(ee);var ie=F(ee,2);q(N(ie),{get icon(){return Ro},class:`table-icon-svg`}),He(2),E(ie),E(a),E(r),R(`change`,o,()=>LF.fetchAuditLog(!0)),Wi(o,()=>LF.auditMethod,e=>LF.auditMethod=e),R(`change`,p,()=>LF.fetchAuditLog(!0)),Wi(p,()=>LF.auditStatusCode,e=>LF.auditStatusCode=e),R(`change`,ee,()=>LF.fetchAuditLog(!0)),Wi(ee,()=>LF.auditStream,e=>LF.auditStream=e),R(`click`,ie,()=>LF.clearAuditFilters()),B(e,r),O()}Vr([`change`,`click`]);var BF=z(`Live stream connecting…`),VF=z(` `),HF=z(`Live`),UF=z(` `);function WF(e,t){D(t,!0);let n=k(()=>UC.auditLivePauseReason()),r=k(()=>UC.liveLogsStreaming&&!L(n));var i=Zr(),a=P(i),o=e=>{var t=UF(),i=N(t);let a;var o=F(i,2),s=e=>{B(e,BF())},c=e=>{var t=VF(),r=N(t,!0);E(t),I(e=>V(r,e),[()=>jC(L(n))]),B(e,t)},l=e=>{B(e,HF())};H(o,e=>{UC.liveLogsStreaming?L(n)?e(c,1):e(l,-1):e(s)}),E(t),I(()=>a=W(i,1,`live-dot svelte-tve6yv`,null,a,{"is-streaming":L(r)})),B(e,t)},s=k(()=>As.liveLogsVisible());H(a,e=>{L(s)&&e(o)}),B(e,i),O()}var GF=z(` `),KF=z(``);function qF(e,t){D(t,!0);let n=k(()=>[{key:`provider`,text:Dc(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: `+Ac(t.entry),mono:!0},{key:`failover`,text:nF(t.entry)&&`failover: `+nF(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=KF(),i=F(N(r),2);U(i,21,()=>L(n),e=>e.key,(e,t)=>{var n=GF(),r=N(n,!0);E(n),I(()=>{W(n,1,Pi([`provider-badge`,L(t).class,{mono:L(t).mono}]),`svelte-hyopt0`),V(r,L(t).text)}),B(e,n)}),E(i),E(r),B(e,r),O()}var JF=z(``),YF=z(` `);function XF(e,t){D(t,!0);let n=k(()=>lF(t.entry)),r=k(()=>L(n).length>0?dF(t.entry):``),i=k(()=>L(n).length>0?uF(t.entry):``);var a=Zr(),o=P(a),s=e=>{var a=YF(),o=N(a);U(o,21,()=>L(n),e=>t.entry.id+`-pip-`+e.seq,(e,t)=>{var n=JF();let r;I(e=>{r=W(n,1,`audit-attempt-pip svelte-1eu22xn`,null,r,{"audit-attempt-success":!!(L(t)&&L(t).success),"audit-attempt-error":!(L(t)&&L(t).success)}),G(n,`title`,e)},[()=>fF(L(t))]),B(e,n)}),E(o);var s=F(o,2),c=N(s,!0);E(s),E(a),I(()=>{G(a,`title`,L(r)),G(a,`aria-label`,L(r)),V(c,L(i))}),B(e,a)};H(o,e=>{L(n).length>0&&e(s)}),B(e,a),O()}var ZF=new Set([`instructions`,`messages`,`input`,`previous_response_id`,`choices`,`output`]);function QF(e){if(!e||typeof e!=`object`)return``;let t=String(e.type||``).toLowerCase();if(t===`image`||t===`image_url`||t===`input_image`||t===`output_image`)return`[Image]`;if(t===`audio`||t===`input_audio`||t===`output_audio`)return`[Audio]`;if(t===`file`||t===`input_file`||t===`output_file`){let t=String(e.filename||e.name||``).trim();return t?`[File: `+t+`]`:`[File]`}return typeof e.refusal==`string`?e.refusal:``}function $F(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:QF(e)).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 eI(e){return!e||typeof e!=`object`?``:$F(e.content)||(typeof e.refusal==`string`?e.refusal.trim():``)}function tI(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 nI(e){if(e==null)return[];if(Array.isArray(e))return e.flatMap(nI);if(typeof e==`object`)return Object.entries(e).flatMap(([e,t])=>[e,...nI(t)]);let t=String(e);return t?[t]:[]}function rI(e){return $I(e).flatMap(e=>[...e.name?[String(e.name)]:[],...nI(e.arguments)])}function iI(e){return Array.isArray(e)?e.flatMap(e=>e&&typeof e==`object`&&e.type===`tool_use`?rI([e]):tI(e)):tI(e)}function aI(e){let t=e&&e.usage?e.usage.estimated_cached_characters:null;if(t==null)return null;let n=Number(t);return Number.isFinite(n)&&n>0?Math.floor(n):0}function oI(e,t){if(!e)return null;let n=(Array.isArray(t)?t:[]).reduce((e,t)=>e+String(t||``).length,0),r=Math.min(String(e).length,n);return r>0?{total:r}:null}function sI(e){let t=e&&e.arguments!==void 0?e.arguments:``,n=``;if(typeof t==`string`)n=t;else try{n=JSON.stringify(t)}catch{n=String(t)}return(String(e&&e.name||``)+`(`+n+`)`).length}function cI(e){return{characters:(Array.isArray(e)?e:[]).map(sI)}}function lI(e,t){let n=Math.max(0,Number(t||0));return e.map(e=>{if(!e||e.role===`error`)return e;let t=Math.max(0,Number(e._promptTextCharacters||0)),r=Math.min(n,t);n-=r;let i=0;(Array.isArray(e._toolPromptCharacters)?e._toolPromptCharacters:[]).forEach(e=>{let t=Math.max(0,Number(e||0)),r=Math.min(n,t);n-=r,i+=r});let a=t+(e._toolPromptCharacters||[]).reduce((e,t)=>e+Math.max(0,Number(t||0)),0);return{...e,promptCacheRatio:a>0?(r+i)/a:0}})}function uI(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=$F(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=$F(e.content);return n?{role:t,text:n}:null}).filter(Boolean)}function dI(e){return eI(e)}function fI(e){if(!e||typeof e!=`object`)return[];let t=[];return t.push(...tI(e.instructions)),Array.isArray(e.messages)&&e.messages.forEach(e=>{!e||typeof e!=`object`||(t.push(...iI(e.content)),t.push(...rI(e.tool_calls)))}),typeof e.input==`string`?t.push(e.input):Array.isArray(e.input)?e.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call`||e.type===`tool_use`){t.push(...rI([e]));return}t.push(...iI(e.content)),typeof e.text==`string`&&t.push(e.text)}}):e.input&&typeof e.input==`object`&&(t.push(...tI(e.input.content)),typeof e.input.text==`string`&&t.push(e.input.text)),t.map(e=>String(e||``)).filter(e=>e.length>0)}var pI=e=>$F(e);function mI(e){if(!e||!e.data)return``;let t=TP(e.data.response_body,0,pI);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(CP(e),0,pI)||e:``}return TP(n,0,pI)||$F(n)}function hI(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 gI(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 _I(e){return e?!!yI(e):!1}function vI(e){let t=String(e||``).trim().split(`?`)[0].replace(/\/+$/,``).toLowerCase();return t.startsWith(`/v1/`)?t.slice(3):t}function yI(e){switch(vI(e)){case`/chat/completions`:return`chat`;case`/responses`:return`responses`;case`/messages`:return`messages`;default:return``}}function bI(e){if(!e||typeof e!=`object`)return null;try{return JSON.parse(JSON.stringify(e))}catch{return null}}function xI(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 SI(e){let t=yI(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():``)!==``||oL(n)!==``}function CI(e,t){let n=String(t||``).trim(),r=yI(e&&e.path),i=bI(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=oL(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&&xI(o,bI(e.message)),o.push({role:`user`,content:n})}else a&&a.content!==void 0&&xI(o,{role:String(a.role||`assistant`),content:bI(a.content)||a.content}),o.push({role:`user`,content:n});return i.messages=o,i}var wI=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 TI(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]`||wI.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 EI(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 DI(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=OI(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 OI(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 kI(e,t){return!Array.isArray(e)||!t?null:e.find(e=>String(e&&e.id||``)===String(t))||null}function AI(e){return!Array.isArray(e)||e.length===0?null:e.reduce((e,t)=>e?sL(t,e)>=0?t:e:t,null)}function jI(e,t){let n=new Set(Array.isArray(t)?t.map(String):[]);return AI((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 MI(e,t){let n=AI(e);return!!n&&String(n.id||``)===String(t||``)}function NI(e,t,n){return String(e||``).trim()===`audit.flushed`&&String(t||``).trim()!==``&&String(t||``).trim()===String(n||``).trim()}function PI(e,t){let n=Array.isArray(e)?e.filter(Boolean).map(String):[];return(Array.isArray(t)?t:[]).forEach(e=>{let t=String(e&&(e.id||e.request_id)||``).trim();t&&!n.includes(t)&&n.push(t)}),n}function FI(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)||hI(n.output));return!!(r||i)}function II(e){return!e||gI(e.path)?!1:_I(e.path)||FI(e)}function LI(e){let t=0,n=!1,r=!1,i=String(e||``);for(let e=0;e0&&a+1`,`>`).replaceAll(`"`,`"`).replaceAll(`'`,`'`)}function VI(e){return!!(e&&typeof e==`object`&&e.__audio__===!0)}function HI(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`
        `+BI(t)+``+BI(WI(e[t]))+`
        `);return t.length?``:``}function KI(e){let t=UI(e.content_type),n=BI(t+` · `+HI(e.bytes)),r=GI(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+`
        `+BI(i)+`
        `+r+`
        `}function qI(e){try{return JSON.stringify(String(e)).slice(1,-1)}catch{return``}}function JI(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 YI(e,t){if(!t||t.remaining<=0||t.segmentIndex>=t.segments.length)return BI(e);let n=``,r=0,i=0;for(;t.remaining>0&&t.segmentIndex`+BI(l)+``,r=s+l.length,i=s+o.length,t.remaining-=c,c>=a.length){t.segmentIndex++;continue}break}return n?n+BI(e.slice(r)):BI(e)}function XI(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=JI(n&&n.promptCacheHighlight),o=r(t);if(!o||o===`Not captured`)return BI(o);if(!i(e))return o.split(` +`).map(e=>YI(e,a)).join(` +`);let s=o.split(` +`),c=[],l=0;for(;lYI(e,a)).join(` +`);c.push(``+o+``),l=r+1;continue}c.push(YI(e,a)),l++}return c.join(` +`)}function ZI(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 QI(e,t,{timestamp:n,entryID:r,isAnchor:i,isAfterAnchor:a,index:o,toolCalls:s,functionName:c,functionCallID:l,promptCache:u,toolPromptCache:d}){let f=ZI(e),p=u&&Number.isFinite(Number(u.total))?Math.max(0,Number(u.total)):u===null?0:String(t||``).length,m=d&&Array.isArray(d.characters)?d.characters:cI(s).characters;return{uid:r+`-`+o,entryID:r,timestamp:n,text:t,role:f.role,roleLabel:f.label,roleClass:f.className,isAnchor:i,isAfterAnchor:a,toolCalls:Array.isArray(s)&&s.length>0?s:null,functionName:c||``,functionCallID:l||``,promptCacheRatio:0,_promptTextCharacters:p,_toolPromptCharacters:m}}function $I(e){return Array.isArray(e)?e.map(e=>{if(!e)return null;let t=e.function||e,n=``;return t.arguments===void 0?e.arguments===void 0?t.input===void 0?e.input!==void 0&&(n=e.input):n=t.input:n=e.arguments:n=t.arguments,{name:t.name||e.name||``,arguments:n,id:e.call_id||e.id||``}}).filter(Boolean):[]}function eL(e){return Array.isArray(e)?$I(e.filter(e=>e&&typeof e==`object`&&e.type===`tool_use`)):[]}function tL(e){return Array.isArray(e)?e.filter(e=>e&&typeof e==`object`&&e.type===`tool_result`).map(e=>({id:e.tool_use_id||e.call_id||``,text:$F(e.content)})):[]}function nL(e,t,n){!t||!n||[t.call_id,t.id].forEach(t=>{t&&(e[t]=n)})}function rL(e,t,n){if(t&&Array.isArray(t.messages)&&t.messages.forEach(t=>{t&&[...Array.isArray(t.tool_calls)?t.tool_calls:[],...Array.isArray(t.content)?t.content.filter(e=>e&&e.type===`tool_use`):[]].forEach(t=>{t&&nL(e,t,(t.function||t).name||t.name||``)})}),t&&Array.isArray(t.input)&&t.input.forEach(t=>{!t||typeof t!=`object`||t.type!==`function_call`&&t.type!==`tool_use`||nL(e,t,t.name||``)}),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=>{t&&nL(e,t,(t.function||t).name||t.name||``)})}n&&Array.isArray(n.output)&&n.output.forEach(t=>{!t||t.type!==`function_call`&&t.type!==`tool_use`||nL(e,t,t.name||``)}),n&&Array.isArray(n.content)&&n.content.forEach(t=>{!t||t.type!==`tool_use`||nL(e,t,t.name||``)})}function iL(e){return Array.isArray(e)?`[`+e.map(iL).join(`,`)+`]`:e&&typeof e==`object`?`{`+Object.keys(e).sort().map(t=>JSON.stringify(t)+`:`+iL(e[t])).join(`,`)+`}`:JSON.stringify(e)}function aL(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(iL)}function oL(e){let t=e&&e.conversation;return typeof t==`string`?t.trim():t&&typeof t.id==`string`?t.id.trim():``}function sL(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 cL(e,t){if(!Array.isArray(e)||e.length===0)return{messages:[],entryIDs:[]};let n=[...e].sort(sL),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;rL(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,functionCallID:e.functionCallID});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=(e,t)=>oI(e,t),b=e=>cI(e),x=(t,n,{toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s}={})=>QI(t,n,{timestamp:h,entryID:e.id,isAnchor:p,isAfterAnchor:m,index:++u,toolCalls:r,functionName:i,functionCallID:a,promptCache:o,toolPromptCache:s});if(g&&g.system!==void 0){let e=$F(g.system);e&&i.push(x(`system`,e,{promptCache:y(e,tI(g.system))}))}if(g&&g.instructions!==void 0){let e=$F(g.instructions);e&&i.push(x(`system`,e,{promptCache:y(e,tI(g.instructions))}))}g&&Array.isArray(g.messages)&&g.messages.forEach(e=>{if(!e)return;let t=(e.role||`user`).toLowerCase();if(t===`tool`){let t=$F(e.content),n=e.name||r[e.tool_call_id]||``;t&&i.push(x(`function_result`,t,{functionName:n,functionCallID:e.tool_call_id||``,promptCache:y(t,tI(e.content))}));return}if(t===`assistant`){let n=eI(e),r=[...$I(e.tool_calls),...eL(e.content)];if(n||r.length>0){let a=y(n,tI(e.content));i.push(x(t,n,{toolCalls:r,promptCache:a,toolPromptCache:b(r)}))}return}tL(e.content).forEach(e=>{e.text&&i.push(x(`function_result`,e.text,{functionName:r[e.id]||``,functionCallID:e.id,promptCache:y(e.text,[e.text])}))});let n=eI(e);n&&i.push(x(t,n,{promptCache:y(n,tI(e.content))}))}),g&&g.input!==void 0&&(Array.isArray(g.input)?g.input.forEach(e=>{if(!(!e||typeof e!=`object`)){if(e.type===`function_call_output`||e.type===`tool_result`){let t=e.type===`tool_result`,n=t?e.content:e.output,a=t?e.tool_use_id||e.call_id||``:e.call_id||``,o=typeof n==`string`?n:$F(n);o&&i.push(x(`function_result`,o,{functionName:r[a]||e.name||``,functionCallID:a,promptCache:y(o,t?tI(e.content):[o])}))}else if(e.type===`function_call`||e.type===`tool_use`){let t=$I([e]);i.push(x(`function_call`,``,{toolCalls:t,toolPromptCache:b(t)}))}else if(e.role){let t=String(e.role).toLowerCase(),n=$F(e.content);n&&i.push(x(t,n,{promptCache:y(n,tI(e.content))}))}}}):uI(g.input).forEach(e=>{if(!e.text)return;let t=[];typeof g.input==`string`?t=[g.input]:g.input&&typeof g.input==`object`&&(t=tI(g.input.content),typeof g.input.text==`string`&&t.push(g.input.text)),i.push(x(e.role,e.text,{promptCache:y(e.text,t)}))}));let S=i.splice(v),C=S.map(f),w=aL(g),T=w!==null,ee=OI(e),te=!!ee&&a.has(ee),ne=String(g&&g.previous_response_id||``).trim(),re=oL(g),ie=te||!!ne&&o.has(ne)||!!re&&s.has(re);if(m){let e=T&&l&&l.length>0&&l.every((e,t)=>w[t]===e);if(T&&!e&&!te||!T&&!ie)return}p&&T&&(l=[...w]);let ae=String(e.id||``).trim();p&&(a.clear(),o.clear(),s.clear()),ae&&(p||m)&&a.add(ae),re&&s.add(re);let oe=0;for(;oe0;){let t=c.slice(-e),n=C.slice(0,e);if(t.every((e,t)=>e===n[t]))break;e--}i.push(...S.slice(e)),c.push(...C.slice(e))}let se=aI(e);if(g&&se!==null&&i.splice(0,i.length,...lI(i,se)),_&&Array.isArray(_.choices)){let e=_.choices[0];if(e&&e.message){let t=(e.message.role||`assistant`).toLowerCase(),n=eI(e.message),r=$I(e.message.tool_calls);if(n||r.length>0){let e=x(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`||e.type===`tool_use`){let t=x(`function_call`,``,{toolCalls:$I([e])});i.push(t),c.push(f(t));return}let t=(e.role||`assistant`).toLowerCase(),n=dI(e);if(n){let e=x(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=$F(_.content),n=eL(_.content);if(t||n.length>0){let r=x(e,t,{toolCalls:n});i.push(r),c.push(f(r))}}let ce=mI(e);ce&&i.push(x(`error`,ce));let le=String(_&&_.id||``).trim();le&&o.add(le)}),{messages:i,entryIDs:[...a]}}function lL(e){return e.role===`function_call`?(e.toolCalls||[]).map(function(e){return e.name+`(`+dL(e)+`)`}).join(` + +`):e.text||``}function uL(e){return e?[String(e.text||``),Array.isArray(e.toolCalls)&&e.toolCalls.length>0?lL({role:`function_call`,toolCalls:e.toolCalls}):``].filter(Boolean).join(` + +`):``}function dL(e){let t=e&&e.arguments!==void 0?e.arguments:``;if(typeof t!=`string`)try{return JSON.stringify(t,null,2)}catch{return String(t)}try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}var fL=600*1e3,pL=15*1e3,mL=250,hL=class{#e=A(!1);get conversationOpen(){return L(this.#e)}set conversationOpen(e){j(this.#e,e,!0)}#t=A(!1);get conversationLoading(){return L(this.#t)}set conversationLoading(e){j(this.#t,e,!0)}#n=A(``);get conversationError(){return L(this.#n)}set conversationError(e){j(this.#n,e,!0)}#r=A(``);get conversationAnchorID(){return L(this.#r)}set conversationAnchorID(e){j(this.#r,e,!0)}#i=A(M([]));get conversationEntryIDs(){return L(this.#i)}set conversationEntryIDs(e){j(this.#i,e,!0)}#a=A(``);get conversationSessionID(){return L(this.#a)}set conversationSessionID(e){j(this.#a,e,!0)}#o=A(!1);get conversationTruncated(){return L(this.#o)}set conversationTruncated(e){j(this.#o,e,!0)}#s=A(!1);get conversationFollowLatest(){return L(this.#s)}set conversationFollowLatest(e){j(this.#s,e,!0)}#c=A(``);get conversationOpenedFromID(){return L(this.#c)}set conversationOpenedFromID(e){j(this.#c,e,!0)}#l=A(``);get followUpText(){return L(this.#l)}set followUpText(e){j(this.#l,e,!0)}#u=A(!1);get followUpSending(){return L(this.#u)}set followUpSending(e){j(this.#u,e,!0)}#d=A(``);get followUpError(){return L(this.#d)}set followUpError(e){j(this.#d,e,!0)}followUpRequestID=``;followUpAbort=null;conversationRequestToken=0;conversationReturnFocusEl=null;bodyPointerStart=null;#f=A(null);get conversationDialogEl(){return L(this.#f)}set conversationDialogEl(e){j(this.#f,e,!0)}#p=A(null);get conversationCloseBtnEl(){return L(this.#p)}set conversationCloseBtnEl(e){j(this.#p,e,!0)}#m=A(null);get conversationThreadEl(){return L(this.#m)}set conversationThreadEl(e){j(this.#m,e,!0)}get conversationEntries(){return(this.conversationEntryIDs||[]).map(e=>UC.auditRecord(e)).filter(Boolean)}#h=k(()=>cL(this.conversationEntries,this.conversationAnchorID));get conversationView(){return L(this.#h)}set conversationView(e){j(this.#h,e)}get conversationMessages(){return this.conversationView.messages}get conversationBranchEntryIDs(){return this.conversationView.entryIDs}_setConversationEntryIDs(e){this.conversationEntryIDs=[...new Set((Array.isArray(e)?e:[]).filter(Boolean))],UC.pinAuditRecords(this.conversationEntryIDs)}canShowConversation(e){return II(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 gc(e)}renderBodyWithConversationHighlights(e,t,n){return XI(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._setConversationEntryIDs([]),this.conversationTruncated=!1,this.conversationFollowLatest=!1,this.followUpText=``,this.followUpError=``,this.followUpRequestID=``,requestAnimationFrame(()=>this._focusConversationDrawer()),this._conversationEntryLivePending(e)){this.conversationFollowLatest=!0,this.conversationLoading=!1,this._addConversationRecord(UC.upsertAuditRecord(e,`conversation.live`));return}this.conversationLoading=!0,await this.fetchConversation(e.id,r,!0,!0)}_conversationEntryLivePending(e){return typeof UC.auditEntryLiveDetailPending==`function`&&UC.auditEntryLiveDetailPending(e)}_applyConversationView(){let e=this.conversationEntries,t=cL(e,this.conversationAnchorID);if(this.conversationFollowLatest){let n=jI(e,t.entryIDs);n&&n.id&&String(n.id)!==this.conversationAnchorID&&(this.conversationAnchorID=String(n.id))}}handleAuditRecordChange(e,t){if(!this.conversationOpen||!e)return;let n=String(e.id||``).trim(),r=DI(this.conversationEntries,this.conversationAnchorID,this.conversationSessionID,this.followUpRequestID,e);if(r.accepted&&(this.followUpRequestID=r.followUpRequestID,n&&r.submittedChild&&(this.conversationAnchorID=n,this.conversationFollowLatest=!0),this._addConversationRecord(e),NI(String(t||e._live_state||``).trim(),n,this.conversationAnchorID))){this.conversationMessages.length===0&&(this.conversationLoading=!0);let e=++this.conversationRequestToken;this.fetchConversation(n,e,!1)}}_addConversationRecord(e){let t=IC(e);t&&!this.conversationEntryIDs.includes(t)&&this._setConversationEntryIDs([...this.conversationEntryIDs,t]),!this.conversationSessionID&&e.session_id&&(this.conversationSessionID=String(e.session_id).trim()),this._applyConversationView(),this.conversationFollowLatest&&this._scheduleLatestScroll()}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 UC.liveAuditStateSettled!=`function`||!UC.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._setConversationEntryIDs([]),this.conversationFollowLatest=!1,this.conversationOpenedFromID=``,this.followUpRequestID=``,this.followUpSending=!1;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 Ts(`/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.`;return}let a=i.data||{},o=a.anchor_id||e,s=Array.isArray(a.entries)?a.entries:[],c=UC.upsertAuditRecords(s,`conversation.hydrated`),l=PI(this.conversationEntryIDs,c);l.length>this.conversationEntryIDs.length&&this._setConversationEntryIDs(l),r&&(this.conversationFollowLatest=MI(c,o)),this.conversationAnchorID=o;let u=this.conversationEntries.find(e=>e.id===this.conversationAnchorID);u&&u.session_id&&(this.conversationSessionID=String(u.session_id).trim()),this.conversationTruncated=!!a.truncated,this._applyConversationView(),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.`}finally{t===this.conversationRequestToken&&(this.conversationLoading=!1)}}selectedConversationEntry(){return kI(this.conversationEntries,this.conversationAnchorID)}followUpKind(){let e=this.selectedConversationEntry();return SI(e)?yI(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=CI(e,this.followUpText);if(!e||!t)return;let n=this.conversationAnchorID,r=_L(),i=new AbortController,a=!1,o=setTimeout(()=>{a=!0,i.abort()},fL);this.followUpSending=!0,this.followUpError=``,this.followUpRequestID=r,this.followUpAbort=i;try{let a=TI(e,n,r),o=await Cs(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 gL(o),!UC.liveLogsStreaming&&this.conversationOpen){let e=++this.conversationRequestToken;await this._selectPersistedFollowUp(n,this.followUpRequestID,e,i.signal)}}catch(e){Ds(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()+pL;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 gL(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 _L(){return globalThis.crypto&&typeof globalThis.crypto.randomUUID==`function`?globalThis.crypto.randomUUID():`dashboard-`+Date.now().toString(36)+`-`+Math.random().toString(36).slice(2)}function vL(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 yL=new hL,bL=0;jn(()=>{kn(()=>{let e=RC(UC.auditRecordChanges,bL);e.length!==0&&(bL=Number(e[e.length-1].version||0),Tr(()=>{e.forEach(e=>{if(!zC(e))return;let t=UC.auditRecord(e.key);yL.handleAuditRecordChange(t,e.eventType)})}))})});var xL=z(``),SL=z(` `),CL=z(` `),wL=z(``),TL=z(`
        `);function EL(e,t){D(t,!0);let n=K(t,`thread`,3,null),r=K(t,`expanded`,3,!1),i=K(t,`onactivate`,3,null),a=K(t,`hidePath`,3,!1),o=k(()=>ys.formatTimestamp(t.entry.timestamp)),s=k(()=>L(o)===`-`?L(o):L(o).slice(L(o).lastIndexOf(` `)+1)),c=k(()=>yL.conversationOpen&&String(yL.conversationAnchorID||``)===String(t.entry.id||``));function l(e){e.preventDefault(),i()&&i()()}function u(e){e.stopPropagation(),e.preventDefault(),n().ontoggle()}function d(e){if(e.stopPropagation(),e.preventDefault(),L(c)){yL.closeConversation();return}yL.openConversation(t.entry,e.currentTarget)}var f=TL();let p;var m=N(f),h=N(m),g=e=>{var t=xL(),r=N(t);{let e=k(()=>n().expanded?Ha:Wa);q(r,{get icon(){return L(e)},class:`audit-thread-expander-svg`})}var i=F(r,2),a=N(i,!0);E(i),E(t),I(()=>{G(t,`aria-expanded`,n().expanded),G(t,`title`,`Session with `+n().count+` requests`),G(t,`aria-label`,`Session with `+n().count+` requests, `+(n().expanded?`collapse`:`expand`)),V(a,n().count)}),R(`click`,t,u),B(e,t)};H(h,e=>{n()&&e(g)});var _=F(h,2),v=N(_),y=N(v,!0);E(v);var b=F(v,2),x=N(b,!0);E(b),E(_);var S=F(_,2),C=e=>{var n=SL(),r=N(n,!0);E(n),I(e=>V(r,e),[()=>jc(t.entry)]),B(e,n)};H(S,e=>{(t.entry.requested_model||t.entry.model)&&e(C)});var w=F(S,2),T=e=>{var n=CL(),r=N(n,!0);E(n),I(()=>V(r,t.entry.path||`-`)),B(e,n)};H(w,e=>{a()||e(T)}),E(m);var ee=F(m,2),te=N(ee);XF(te,{get entry(){return t.entry}});var ne=F(te,2),re=N(ne),ie=N(re,!0);E(re);var ae=F(re,2),oe=N(ae,!0);E(ae),E(ne);var se=F(ne,2),ce=N(se,!0);E(se);var le=F(se,2),ue=e=>{var t=wL();let n;var r=N(t);{let e=k(()=>L(c)?Ua:Wa);q(r,{get icon(){return L(e)},class:`audit-conversation-trigger-svg`})}E(t),I(()=>{n=W(t,1,`audit-conversation-trigger svelte-17mysgz`,null,n,{"audit-conversation-trigger-active":L(c)}),G(t,`title`,L(c)?`Close interactions`:`Open interactions`),G(t,`aria-label`,L(c)?`Close interactions`:`Open interactions`),G(t,`aria-pressed`,L(c))}),R(`click`,t,d),B(e,t)},de=k(()=>yL.canShowConversation(t.entry));H(le,e=>{L(de)&&e(ue)}),E(ee),E(f),I((e,n,i,a)=>{p=W(f,1,`audit-entry-summary svelte-17mysgz`,null,p,e),G(f,`aria-expanded`,r()),W(_,1,`audit-status-badge audit-request-badge ${n??``}`,`svelte-17mysgz`),G(_,`title`,`Status `+(t.entry.status_code||`-`)+` · `+(t.entry.method||`-`)),G(_,`aria-label`,(t.entry.status_code||`-`)+` `+(t.entry.method||`-`)),V(y,t.entry.status_code||`-`),V(x,t.entry.method||`-`),G(ne,`title`,i),G(ne,`aria-label`,L(o)),V(ie,L(o)),V(oe,L(s)),V(ce,a)},[()=>({"audit-entry-summary-live-in-progress":tF(t.entry),"audit-entry-summary-has-interactions":yL.canShowConversation(t.entry)}),()=>eF(t.entry.status_code),()=>Tc(t.entry.timestamp),()=>$P(t.entry.duration_ns)]),R(`click`,f,l),B(e,f),O()}Vr([`click`]);var DL=z(``);function OL(e,t){D(t,!0);let n=K(t,`label`,3,`Copy`),r=K(t,`copiedLabel`,3,`Copied`),i=K(t,`errorLabel`,3,``),a=K(t,`class`,3,`btn`),o=k(()=>t.state.error&&i()?i():t.state.copied?r():n());var s=DL();let c;var l=N(s),u=e=>{q(e,{get icon(){return Ka},width:`14`,height:`14`,"stroke-width":`2.5`})},d=e=>{q(e,{get icon(){return Ya},width:`14`,height:`14`})};H(l,e=>{t.state.copied?e(u):e(d,-1)});var f=F(l,2),p=N(f,!0);E(f),E(s),I(()=>{c=W(s,1,Pi([`copy-feedback-btn`,a()]),null,c,{"copy-feedback-btn-copied":t.state.copied}),V(p,L(o))}),R(`click`,s,e=>{e.preventDefault(),t.onclick?.(e)}),B(e,s),O()}Vr([`click`]);var kL=z(`
        Error Message
         
        `),AL=z(`
         
        `),jL=z(` `),ML=z(` streaming`),NL=z(`
        Body
        `),PL=z(`

        `),FL=z(`

        `),IL=z(`

        `),LL=z(`
        `);function RL(e,t){D(t,!0);let n=kM({logPrefix:`Failed to copy audit payload:`}),r=kM({logPrefix:`Failed to copy audit payload:`}),i=k(()=>t.pane&&t.pane.showHeaders?gc(t.pane.headers):``),a=k(()=>!t.pane||!t.pane.showBody?``:VI(t.pane.body)?KI(t.pane.body):yL.renderBodyWithConversationHighlights(t.pane.entry,t.pane.body,{promptCacheHighlight:t.pane.promptCacheHighlight})),o=k(()=>!!(t.pane&&yL.canShowConversation(t.pane.entry)));function s(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),yL.handleErrorConversationClick(e,t.pane.entry))}var c=LL();let l;var u=N(c),d=e=>{var n=kL(),r=F(N(n),2);let i;var a=N(r,!0);E(r),E(n),I(()=>{i=W(r,1,`audit-json audit-pane-error-message svelte-1h5puht`,null,i,{"audit-pane-clickable-preview":L(o)}),G(r,`role`,L(o)?`button`:null),G(r,`tabindex`,L(o)?0:null),V(a,t.pane.errorMessage)}),R(`mousedown`,r,e=>yL.startBodyInteraction(e)),R(`keydown`,r,s),R(`click`,r,e=>yL.handleErrorConversationClick(e,t.pane.entry)),B(e,n)};H(u,e=>{t.pane.showErrorMessage&&e(d)});var f=F(u,2),p=e=>{var n=AL(),a=N(n),o=N(a),s=N(o,!0);E(o),OL(F(o,2),{get state(){return r},label:`Copy Headers`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>r.copy(t.pane.copyHeaders,gc)}),E(a);var c=F(a,2),l=N(c,!0);E(c),E(n),I(()=>{V(s,t.pane.headersTitle||`Headers`),V(l,L(i))}),B(e,n)};H(f,e=>{t.pane.showHeaders&&e(p)});var m=F(f,2),h=e=>{var r=NL(),i=N(r),o=N(i),s=F(N(o),2),c=e=>{var n=jL(),r=N(n,!0);E(n),I(()=>V(r,t.pane.bodyCacheRatioLabel)),B(e,n)};H(s,e=>{t.pane.bodyCacheRatioLabel&&e(c)});var l=F(s,2),u=e=>{B(e,ML())};H(l,e=>{t.pane.streaming&&e(u)}),E(o),OL(F(o,2),{get state(){return n},label:`Copy Body`,errorLabel:`Copy failed`,class:`audit-copy-btn`,onclick:()=>n.copy(t.pane.copyBody,gc)}),E(i);var d=F(i,2);mi(d,()=>L(a),!0),E(d),E(r),R(`mousedown`,d,e=>yL.startBodyInteraction(e)),R(`click`,d,e=>yL.handleBodyConversationClick(e,t.pane.entry)),B(e,r)};H(m,e=>{t.pane.showBody&&e(h)});var g=F(m,2),_=e=>{var n=PL(),r=N(n,!0);E(n),I(()=>V(r,t.pane.emptyMessage)),B(e,n)};H(g,e=>{t.pane.showEmpty&&e(_)});var v=F(g,2),y=e=>{var n=FL(),r=F(N(n),2),i=N(r,!0);E(r),E(n),I(()=>V(i,t.pane.pendingMessage)),B(e,n)};H(v,e=>{t.pane.showPending&&e(y)});var b=F(v,2),x=e=>{var n=IL(),r=N(n,!0);E(n),I(()=>V(r,t.pane.tooLargeMessage)),B(e,n)};H(b,e=>{t.pane.showTooLarge&&e(x)}),E(c),I(()=>l=W(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)})),B(e,c),O()}Vr([`mousedown`,`keydown`,`click`]);var zL=z(` `),BL=z(` `),VL=z(` `),HL=z(` `),UL=z(``),WL=z(`
        `),GL=z(`
        `);function KL(e,t){D(t,!0);let n=K(t,`panes`,19,()=>[]),r=A(null),i=k(()=>NF(L(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=PF(e.key,i,t);a!=null&&(e.preventDefault(),((e.currentTarget?.closest?.(`.audit-pane-tablist`))?.querySelectorAll(`.audit-pane-tab`)[i.indexOf(a)])?.focus?.(),j(r,a,!0))}var c=GL(),l=N(c);U(l,21,n,e=>e.id,(e,t)=>{var n=UL();let c;var l=N(n),u=N(l),d=e=>{q(e,{get icon(){return Na}})},f=e=>{q(e,{get icon(){return Ma}})};H(u,e=>{L(t).pane.direction===`request`?e(d):L(t).pane.direction===`response`&&e(f,1)}),E(l);var p=F(l,2),m=N(p,!0);E(p);var h=F(p,2),g=e=>{var n=zL(),r=N(n);E(n),I(()=>V(r,`#${L(t).pane.seq??``}`)),B(e,n)};H(h,e=>{L(t).pane.seq&&e(g)});var _=F(h,2),v=e=>{var n=BL(),r=N(n,!0);E(n),I(()=>{W(n,1,`provider-badge audit-pane-kind audit-pane-kind-${L(t).pane.kind??``}`,`svelte-1bc5vi5`),V(r,L(t).pane.kind)}),B(e,n)};H(_,e=>{L(t).pane.kind&&e(v)});var y=F(_,2);U(y,17,()=>L(t).pane.noChangeSteps||[],e=>e.id,(e,t)=>{var n=VL(),r=N(n,!0);E(n),I(()=>{G(n,`title`,L(t).title),V(r,L(t).label)}),B(e,n)});var b=F(y,2),x=e=>{var n=HL(),r=N(n,!0);E(n),I(()=>V(r,L(t).pane.savingsLabel)),B(e,n)};H(b,e=>{L(t).pane.savingsLabel&&e(x)});var S=F(b,2),C=e=>{var n=BL(),r=N(n,!0);E(n),I(e=>{W(n,1,`audit-status-badge ${e??``}`,`svelte-1bc5vi5`),V(r,L(t).pane.statusCode)},[()=>eF(L(t).pane.statusCode)]),B(e,n)};H(S,e=>{L(t).pane.statusCode&&e(C)}),E(n),I((e,r)=>{c=W(n,1,`audit-pane-tab svelte-1bc5vi5`,null,c,{"audit-pane-tab-active":L(i)===L(t).id}),G(n,`aria-selected`,L(i)===L(t).id),G(n,`id`,e),G(n,`aria-controls`,r),G(n,`tabindex`,L(i)===L(t).id?0:-1),W(l,1,Pi([`audit-pane-icon`,L(t).pane.direction&&`audit-pane-icon-${L(t).pane.direction}`]),`svelte-1bc5vi5`),V(m,L(t).pane.title)},[()=>a(L(t).id),()=>o(L(t).id)]),R(`keydown`,n,e=>s(e,L(t).id)),R(`click`,n,()=>j(r,L(t).id,!0)),B(e,n)}),E(l),U(F(l,2),17,n,e=>e.id,(e,t)=>{var n=WL();let r;RL(N(n),{get pane(){return L(t).pane}}),E(n),I((e,a)=>{G(n,`id`,e),G(n,`aria-labelledby`,a),r=Vi(n,``,r,{display:L(i)===L(t).id?null:`none`})},[()=>o(L(t).id),()=>a(L(t).id)]),B(e,n)}),E(c),B(e,c),O()}Vr([`keydown`,`click`]);var qL=z(`
        `),JL=z(`
        `);function YL(e,t){D(t,!0);let n=K(t,`thread`,3,null),r=K(t,`hidePath`,3,!1),i=k(()=>LF.isAuditEntryExpanded(t.entry)),a=k(()=>yL.conversationOpen&&String(yL.conversationAnchorID||``)===String(t.entry.id||``)),o=k(()=>L(i)?jF(t.entry,fI):[]),s=k(()=>L(i)?EN(t.entry,xP.auditEntryWorkflow(t.entry),xP.workflowFeatureCaps()):null);function c(){LF.toggleAuditEntryExpanded(t.entry)}var l=JL();let u;var d=N(l);EL(d,{get entry(){return t.entry},get thread(){return n()},get expanded(){return L(i)},get hidePath(){return r()},onactivate:c});var f=F(d,2),p=e=>{var n=qL(),r=N(n),i=e=>{HM(e,{get chart(){return L(s)}})};H(r,e=>{L(s)&&e(i)});var a=F(r,2);KL(a,{get entry(){return t.entry},get panes(){return L(o)}}),qF(F(a,2),{get entry(){return t.entry}}),E(n),Oi(3,n,()=>ic,()=>({y:-6,duration:yP(150)})),B(e,n)};H(f,e=>{L(i)&&e(p)}),E(l),I(()=>u=W(l,1,`audit-entry svelte-cmjgwr`,null,u,{"audit-entry-interactions-open":L(a)})),B(e,l),O()}var XL=z(`
        `),ZL=z(`
        `),QL=z(`

        `),$L=z(`
        `),eR=z(`
        `);function tR(e,t){D(t,!0);let n=k(()=>LP(t.entry)),r=k(()=>LF.isThreadExpanded(L(n))),i=k(()=>LF.threadChildren(L(n))),a=k(()=>L(i)&&!L(i).loading&&Number(L(i).total||0)>L(i).entries.length+1);var o=Zr(),s=P(o),c=e=>{YL(e,{get entry(){return t.entry}})},l=k(()=>!zP(t.entry)),u=e=>{var n=eR(),o=N(n);{let e=k(()=>({count:RP(t.entry),expanded:L(r),ontoggle:()=>LF.toggleThread(t.entry)}));YL(o,{get entry(){return t.entry},get thread(){return L(e)}})}var s=F(o,2),c=e=>{var n=$L(),r=N(n),o=e=>{var t=XL();NS(N(t),{size:14,label:`Loading session requests`}),E(t),B(e,t)};H(r,e=>{L(i)&&L(i).loading&&e(o)});var s=F(r,2);U(s,17,()=>L(i)&&L(i).entries||[],e=>e.id,(e,n)=>{var r=ZL(),i=N(r);{let e=k(()=>L(n).path===t.entry.path);YL(i,{get entry(){return L(n)},get hidePath(){return L(e)}})}E(r),B(e,r)});var c=F(s,2),l=e=>{var t=QL(),n=N(t);E(t),I(()=>V(n,`Showing the latest ${L(i).entries.length+1} of ${L(i).total??``} + requests in this session.`)),B(e,t)};H(c,e=>{L(a)&&e(l)}),E(n),Oi(3,n,()=>ac,()=>({duration:yP(150)})),B(e,n)};H(s,e=>{L(r)&&e(c)}),E(n),B(e,n)};H(s,e=>{L(l)?e(c):e(u,-1)}),B(e,o),O()}var nR=z(`

        .

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

        `),aR=z(`
        `),oR=z(`
        `),sR=z(`
        `),cR=z(`
        `),lR=z(`
        `);function uR(e,t){D(t,!0);let n=k(()=>As.config&&As.config.LOGGING_RETENTION_DAYS);kn(()=>{if(J.refreshTick,Xo.page===`audit-logs`)return Tr(()=>r())});function r(){let e=!1;return(async()=>{try{await As.ensureLoaded()}finally{await LF.fetchAuditLog(!0),!e&&As.liveLogsVisible()&&UC.ensureLiveLogs()}})(),()=>{e=!0,UC.stopLiveLogs()}}var i=lR(),a=N(i),o=N(a),s=F(N(o),2),c=e=>{iC(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=nR(),r=N(t,!0),i=F(r),a=N(i,!0);E(i),He(),E(t),I((e,t)=>{V(r,e),V(a,t)},[()=>NP(L(n)),()=>PP(L(n))]),B(e,t)},$$slots:{title:!0}})},l=k(()=>MP(L(n)));H(s,e=>{L(l)&&e(c)}),E(o),E(a);var u=F(a,2);fl(N(u),{onchange:()=>LF.fetchAuditLog(!0)}),E(u);var d=F(u,2);Kc(d,{});var f=F(d,2),p=e=>{B(e,rR())},m=k(()=>As.loaded&&!As.auditVisible()&&!J.needsAuth);H(f,e=>{L(m)&&e(p)});var h=F(f,2),g=N(h);zF(g,{});var _=F(g,2),v=N(_),y=N(v),b=e=>{var t=iR(),n=N(t);E(t),I(e=>V(n,`Showing ${LF.auditLog.offset+1}-${e??``} of ${LF.auditLog.total??``} + ${LF.auditGroupSessions?`sessions`:`logs`}`),[()=>Math.min(LF.auditLog.offset+LF.auditLog.limit,LF.auditLog.total)]),B(e,t)};H(y,e=>{LF.auditLog.total>0&&e(b)});var x=F(y,2),S=N(x);ta(S),He(2),E(x),E(v),WF(F(v,2),{}),E(_);var C=F(_,2),w=e=>{var t=aR();NS(N(t),{size:18,label:`Loading audit logs`}),E(t),B(e,t)},T=e=>{var t=sR();U(t,29,()=>LF.auditLog.entries,e=>e.id,(e,t)=>{var n=oR(),r=N(n),i=e=>{tR(e,{get entry(){return L(t)}})},a=e=>{YL(e,{get entry(){return L(t)}})};H(r,e=>{LF.auditGroupSessions?e(i):e(a,-1)}),E(n),Di(n,()=>hP,()=>({duration:yP(150)})),Oi(1,n,()=>bP,()=>({live:L(t)._live})),B(e,n)}),E(t),B(e,t)};H(C,e=>{LF.loading&&LF.auditLog.entries.length===0?e(w):LF.auditLog.entries.length>0&&e(T,1)});var ee=F(C,2),te=e=>{var t=cR();IS(N(t),{}),E(t),B(e,t)};H(ee,e=>{LF.auditLog.entries.length===0&&!LF.loading&&!J.needsAuth&&e(te)}),oT(F(ee,2),{get total(){return LF.auditLog.total},get offset(){return LF.auditLog.offset},get limit(){return LF.auditLog.limit},onprev:()=>LF.auditLogPrevPage(),onnext:()=>LF.auditLogNextPage()}),E(h),E(i),I(()=>ra(S,LF.auditGroupSessions)),R(`change`,S,()=>LF.toggleAuditGroupSessions()),B(e,i),O()}Vr([`change`]);function dR(e){try{let t=JSON.parse(JSON.stringify(e||{}));return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function fR(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 pR(e,t){let n=String(t||``).trim();return(e||[]).find(e=>String(e&&e.type||``).trim()===n)||null}function mR(e){return Array.isArray(e)&&e.length>0&&String(e[0].type||``).trim()||`system_prompt`}function hR(e,t){let n=String(t||``).trim();return n&&pR(e,n)?n:mR(e)}function gR(e,t){let n=pR(e,t);return!n||!n.defaults?{}:dR(n.defaults)}function _R(e,t,n){return{...gR(e,n),...dR(t)}}function vR(e,t){let n=hR(e,t);return{name:``,type:n,description:``,user_path:``,config:gR(e,n)}}function yR(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 bR(e,t){let n=pR(e,t);return n&&n.label?n.label:t||`Unknown`}function xR(e,t){let n=pR(e,t);return Array.isArray(n&&n.fields)?n.fields:[]}function SR(e,t){if(!t||!e)return t&&t.input===`checkboxes`?[]:``;let n=e[t.key];return n==null?t.input===`checkboxes`?[]:``:t.input===`checkboxes`?fR(n):n}function CR(e,t,n){if(!t)return e;let r=dR(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]=fR(n):r[t.key]=n;return r}function wR(e,t,n){return SR(e,t).includes(String(n||``).trim())}function TR(e,t,n,r){let i=fR(SR(e,t)),a=String(n||``).trim();return a?CR(e,t,r?Array.from(new Set([...i,a])):i.filter(e=>e!==a)):e}function ER(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:dR(e&&e.config)}}var DR=new class{#e=A(M([]));get guardrails(){return L(this.#e)}set guardrails(e){j(this.#e,e,!0)}#t=A(M([]));get types(){return L(this.#t)}set types(e){j(this.#t,e,!0)}#n=A(!0);get available(){return L(this.#n)}set available(e){j(this.#n,e,!0)}#r=A(!1);get loading(){return L(this.#r)}set loading(e){j(this.#r,e,!0)}#i=A(!1);get typesLoading(){return L(this.#i)}set typesLoading(e){j(this.#i,e,!0)}#a=A(``);get error(){return L(this.#a)}set error(e){j(this.#a,e,!0)}#o=A(``);get filter(){return L(this.#o)}set filter(e){j(this.#o,e,!0)}#s=A(!1);get formOpen(){return L(this.#s)}set formOpen(e){j(this.#s,e,!0)}#c=A(!1);get formSubmitting(){return L(this.#c)}set formSubmitting(e){j(this.#c,e,!0)}#l=A(``);get deletingName(){return L(this.#l)}set deletingName(e){j(this.#l,e,!0)}#u=A(`create`);get formMode(){return L(this.#u)}set formMode(e){j(this.#u,e,!0)}#d=A(``);get formOriginalName(){return L(this.#d)}set formOriginalName(e){j(this.#d,e,!0)}#f=A(M({name:``,type:``,description:``,user_path:``,config:{}}));get form(){return L(this.#f)}set form(e){j(this.#f,e,!0)}get filtered(){return yR(this.guardrails,this.filter)}typeLabel(e){return bR(this.types,e)}typeFields(e){return xR(this.types,e)}fieldValue(e){return SR(this.form&&this.form.config,e)}setFieldValue(e,t){this.form={...this.form,config:CR(this.form.config,e,t)}}arrayFieldSelected(e,t){return wR(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=vR(this.types,mR(this.types)),this.formOpen=!0}openEdit(e){let t=hR(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:_R(this.types,e&&e.config,t)},this.formOpen=!0}closeForm(){this.formOpen=!1,this.formMode=`create`,this.formOriginalName=``,this.error=``,this.form=vR(this.types,mR(this.types))}changeType(e){let t=hR(this.types,e);this.form={...this.form,type:t,config:gR(this.types,t)}}async fetchTypes(){this.typesLoading=!0;try{let e=await kT(`/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=hR(this.types,this.form.type);this.form={...this.form,type:t,config:_R(this.types,this.form.config,t)}}finally{this.typesLoading=!1}}async fetchGuardrails(){this.loading=!0,this.error=``;try{let e=await kT(`/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=ER(this.form);try{let t=await AT(`/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}Y.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 AT(`/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,Y.error(e.error);return}if(e.status===`error`){Y.error(e.error);return}Y.success(`Guardrail "`+t+`" deleted.`),this.formOpen&&this.formOriginalName===t&&this.closeForm(),this.fetchGuardrails()}finally{this.deletingName=``}}}},OR=z(`
        `),kR=z(`

        Loading guardrails...

        `),AR=z(`
        `),jR=z(`
        `),MR=z(`
        NameTypeUser PathSummaryActions
        `),NR=z(`

        No guardrails defined yet.

        `),PR=z(`

        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 FR(e,t){D(t,!0);var n=PR(),r=N(n),i=F(N(r),2);q(N(i),{get icon(){return mo},class:`form-action-icon`}),He(2),E(i),E(r);var a=F(r,2),o=e=>{var t=OR(),n=N(t);jw(N(n),{id:`guardrail-filter`,placeholder:`Filter by name, type, user path, summary...`,label:`Guardrail filter`,get value(){return DR.filter},set value(e){DR.filter=e}}),E(n),E(t),B(e,t)};H(a,e=>{DR.available&&e(o)});var s=F(a,2),c=e=>{var t=kR();NS(N(t),{size:16,label:`Loading guardrails`}),He(),E(t),B(e,t)};H(s,e=>{DR.loading&&DR.filtered.length===0&&e(c)});var l=F(s,2),u=e=>{var t=MR(),n=N(t),r=F(N(n));U(r,21,()=>DR.filtered,e=>e.name,(e,t)=>{var n=jR(),r=N(n),i=N(r,!0);E(r);var a=F(r),o=N(a),s=N(o,!0);E(o),E(a);var c=F(a),l=N(c,!0);E(c);var u=F(c),d=N(u),f=N(d,!0);E(d);var p=F(d,2),m=e=>{var n=AR(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(p,e=>{L(t).description&&e(m)}),E(u);var h=F(u),g=N(h),_=N(g);{let e=k(()=>`Edit guardrail `+L(t).name);OT(_,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>DR.openEdit(L(t)),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}var v=F(_,2);{let e=k(()=>(DR.deletingName===L(t).name?`Deleting guardrail `:`Delete guardrail `)+L(t).name),n=k(()=>DR.deletingName===L(t).name);OT(v,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>DR.deleteGuardrail(L(t)),get disabled(){return L(n)},children:(e,t)=>{q(e,{get icon(){return Ro},class:`table-icon-svg`})},$$slots:{default:!0}})}E(g),E(h),E(n),I(e=>{V(i,L(t).name),V(s,e),V(l,L(t).user_path||`—`),V(f,L(t).summary||L(t).description||`No summary yet.`)},[()=>DR.typeLabel(L(t).type)]),B(e,n)}),E(r),E(n),E(t),B(e,t)};H(l,e=>{DR.filtered.length>0&&e(u)});var d=F(l,2),f=e=>{B(e,NR())};H(d,e=>{DR.filtered.length===0&&!DR.loading&&DR.available&&!DR.error&&!J.authError&&e(f)}),E(n),I(()=>i.disabled=DR.typesLoading||DR.formSubmitting||!DR.available),R(`click`,i,()=>DR.openCreate()),B(e,n),O()}Vr([`click`]);var IR=z(`

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

        `),LR=z(``),RR=z(``),zR=z(``),BR=z(``),VR=z(``),HR=z(``),UR=z(``),WR=z(``),GR=z(``),KR=z(`
        `),qR=z(``),JR=z(` `),YR=z(`
        `),XR=z(`
        `);function ZR(e,t){D(t,!0);let n=k(()=>DR.formMode===`edit`);{let t=e=>{B(e,IR())},r=k(()=>L(n)?`Edit Guardrail`:`Create Guardrail`);ME(e,{get open(){return DR.formOpen},get title(){return L(r)},ariaLabel:`Guardrail editor`,get error(){return DR.error},get submitting(){return DR.formSubmitting},submitLabel:`Save Guardrail`,dialogClass:`settings-guardrails-editor guardrails-editor-wide`,onclose:()=>DR.closeForm(),onsubmit:()=>DR.submitForm(),headerHint:t,children:(e,t)=>{var r=XR(),i=N(r);PE(i,{id:`guardrail-name`,label:`Name`,children:(e,t)=>{var r=LR();ta(r),I(()=>{r.disabled=L(n),G(r,`data-modal-autofocus`,!L(n)||void 0)}),ua(r,()=>DR.form.name,e=>DR.form.name=e),B(e,r)},$$slots:{default:!0}});var a=F(i,2);PE(a,{id:`guardrail-type`,label:`Type`,children:(e,t)=>{var r=zR();U(r,21,()=>DR.types,e=>e.type,(e,t)=>{var n=RR(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).type)&&(n.value=(n.__value=L(t).type)??``)}),B(e,n)}),E(r);var i;Ui(r),I(()=>{r.disabled=L(n),i!==(i=DR.form.type)&&(r.value=(r.__value=DR.form.type)??``,Hi(r,DR.form.type))}),R(`change`,r,e=>DR.changeType(e.currentTarget.value)),B(e,r)},$$slots:{default:!0}});var o=F(a,2);PE(o,{id:`guardrail-description`,label:`Description`,children:(e,t)=>{var r=BR();ta(r),I(()=>G(r,`data-modal-autofocus`,L(n)?!0:void 0)),ua(r,()=>DR.form.description,e=>DR.form.description=e),B(e,r)},$$slots:{default:!0}});var s=F(o,2),c=N(s);iC(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=>{B(e,VR())},$$slots:{title:!0}});var l=F(c,2);ta(l),E(s),U(F(s,2),17,()=>DR.typeFields(DR.form.type),e=>e.key,(e,t)=>{var n=Zr(),r=P(n),i=e=>{var n=KR(),r=N(n);{let e=e=>{var n=HR(),r=N(n,!0);E(n),I(()=>{G(n,`for`,`guardrail-field-`+L(t).key),V(r,L(t).label)}),B(e,n)},n=k(()=>`guardrail-field-help-`+L(t).key),i=k(()=>L(t).label+` help`),a=k(()=>L(t).help||``);iC(r,{get copyId(){return L(n)},get label(){return L(i)},get text(){return L(a)},title:e,$$slots:{title:!0}})}var i=F(r,2),a=e=>{var n=UR();U(n,21,()=>L(t).options||[],e=>e.value,(e,t)=>{var n=RR(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(n);var r;Ui(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0),r!==(r=e)&&(n.value=(n.__value=e)??``,Hi(n,e))},[()=>DR.fieldValue(L(t))]),R(`change`,n,e=>DR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)},o=e=>{var n=WR();dt(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`placeholder`,L(t).placeholder||``),na(n,e),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0)},[()=>DR.fieldValue(L(t))]),R(`input`,n,e=>DR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)},s=e=>{var n=GR();ta(n),I(e=>{G(n,`id`,`guardrail-field-`+L(t).key),G(n,`type`,L(t).input||`text`),G(n,`placeholder`,L(t).placeholder||``),na(n,e),G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0)},[()=>DR.fieldValue(L(t))]),R(`input`,n,e=>DR.setFieldValue(L(t),e.currentTarget.value)),B(e,n)};H(i,e=>{L(t).input===`select`?e(a):L(t).input===`textarea`?e(o,1):e(s,-1)}),E(n),B(e,n)},a=e=>{var n=YR(),r=N(n),i=N(r,!0);E(r);var a=F(r,2);U(a,21,()=>L(t).options||[],e=>L(t).key+`-`+e.value,(e,n)=>{var r=qR(),i=N(r);ta(i);var a=F(i,2),o=N(a,!0);E(a),E(r),I(e=>{ra(i,e),V(o,L(n).label)},[()=>DR.arrayFieldSelected(L(t),L(n).value)]),R(`change`,i,e=>DR.toggleArrayFieldValue(L(t),L(n).value,e.currentTarget.checked)),B(e,r)}),E(a);var o=F(a,2),s=e=>{var n=JR(),r=N(n,!0);E(n),I(()=>{G(n,`id`,`guardrail-field-help-`+L(t).key),V(r,L(t).help)}),B(e,n)};H(o,e=>{L(t).help&&e(s)}),E(n),I(()=>{G(n,`aria-describedby`,L(t).help?`guardrail-field-help-`+L(t).key:void 0),V(i,L(t).label)}),B(e,n)};H(r,e=>{L(t).input===`checkboxes`?e(a,-1):e(i)}),B(e,n)}),E(r),ua(l,()=>DR.form.user_path,e=>DR.form.user_path=e),B(e,r)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`change`,`input`]);var QR=z(`

        Guardrails

        `),$R=z(`
        Runtime guardrail execution is currently off because GUARDRAILS_ENABLED is disabled. You can still manage + definitions here.
        `),ez=z(`
        Guardrails feature is unavailable.
        `),tz=z(`
        `),nz=z(`

        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 rz(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`guardrails`&&(As.ensureLoaded(),DR.fetchPage())});var n=nz(),r=N(n),i=N(r);iC(N(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=>{B(e,QR())},$$slots:{title:!0}}),E(i),E(r);var a=F(r,2),o=F(N(a),2),s=N(o),c=F(N(s),2),l=N(c,!0);E(c),E(s);var u=F(s,2),d=F(N(u),2),f=N(d,!0);E(d),E(u),E(o),E(a);var p=F(a,2);Kc(p,{});var m=F(p,2),h=e=>{B(e,$R())},g=k(()=>!As.guardrailsVisible());H(m,e=>{L(g)&&e(h)});var _=F(m,2),v=e=>{B(e,ez())};H(_,e=>{!J.authError&&!DR.available&&e(v)});var y=F(_,2),b=e=>{var t=tz(),n=N(t,!0);E(t),I(()=>V(n,DR.error)),B(e,t)};H(y,e=>{!J.authError&&DR.error&&!DR.formOpen&&e(b)});var x=F(y,2);ZR(x,{}),FR(F(x,2),{}),E(n),I((e,t)=>{V(l,e),V(f,t)},[()=>_c(DR.guardrails.length),()=>_c(DR.types.length)]),B(e,n),O()}var $=new class{#e=A(M([]));get servers(){return L(this.#e)}set servers(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get formSubmitting(){return L(this.#o)}set formSubmitting(e){j(this.#o,e,!0)}#s=A(`create`);get formMode(){return L(this.#s)}set formMode(e){j(this.#s,e,!0)}#c=A(!1);get slugEdited(){return L(this.#c)}set slugEdited(e){j(this.#c,e,!0)}#l=A(!1);get advancedOpen(){return L(this.#l)}set advancedOpen(e){j(this.#l,e,!0)}#u=A(M(Sx()));get form(){return L(this.#u)}set form(e){j(this.#u,e,!0)}#d=A(``);get deletingName(){return L(this.#d)}set deletingName(e){j(this.#d,e,!0)}#f=A(``);get reconnectingName(){return L(this.#f)}set reconnectingName(e){j(this.#f,e,!0)}#p=A(!1);get catalogOpen(){return L(this.#p)}set catalogOpen(e){j(this.#p,e,!0)}#m=A(!1);get catalogLoading(){return L(this.#m)}set catalogLoading(e){j(this.#m,e,!0)}#h=A(``);get catalogError(){return L(this.#h)}set catalogError(e){j(this.#h,e,!0)}#g=A(M(Cx()));get catalog(){return L(this.#g)}set catalog(e){j(this.#g,e,!0)}#_=k(()=>Px(this.servers,this.filter));get filtered(){return L(this.#_)}set filtered(e){j(this.#_,e)}async fetchServers(){if(await As.ensureLoaded(),!As.mcpVisible()){this.available=!1,this.servers=[],this.error=``,this.loading=!1;return}this.loading=!0,this.error=``;try{let e=await kT(`/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=Fx(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=Ax(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=Ix(this.form,this.formMode,this.servers);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/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}Y.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=wx(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 AT(`/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,Y.error(e.error);return}if(e.status===`error`){Y.error(e.error);return}Y.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=wx(e);if(!(!n||this.reconnectingName)){this.reconnectingName=n;try{let e=await AT(`/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,Y.error(e.error);return}if(e.status===`error`){Y.error(e.error);return}let r=e.result.data,i=Tx(r);i===`connected`?Y.success(`MCP server "`+t+`" reconnected.`):i===`disabled`?Y.success(`MCP server "`+t+`" is disabled; no connection was attempted.`):Y.error(`Reconnect attempted, but MCP server "`+t+`" is still `+i+`.`),r&&r.name?this.servers=(this.servers||[]).map(e=>wx(e)===wx(r)?r:e):this.fetchServers()}finally{this.reconnectingName=``}}}async openCatalog(e){let t=String(e&&e.name||``).trim(),n=wx(e);if(n){this.catalogOpen=!0,this.catalogLoading=!0,this.catalogError=``,this.catalog={...Cx(),server:n,status:Tx(e)};try{let e=await Ts(`/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.`:bs(e.data,`Failed to load MCP server catalog.`);return}this.catalog=Lx(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()}},iz=z(``),az=z(`

        `),oz=z(`
        `),sz=z(`

        `),cz=z(`
      • `),lz=z(`

          `),uz=z(`

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

          `),dz=z(` `,1),fz=z(``);function pz(e,t){D(t,!0);let n=k(()=>zx($.catalog));Us(e,{get open(){return $.catalogOpen},variant:`editor`,onclose:()=>$.closeCatalog(),children:(e,t)=>{var r=fz(),i=N(r),a=N(i),o=F(N(a),2),s=N(o),c=N(s,!0);E(s);var l=F(s,2),u=N(l,!0);E(l),E(o),E(a),zs(F(a,2),{label:`Close MCP server catalog`,onclick:()=>$.closeCatalog()}),E(i);var d=F(i,2),f=e=>{ET(e,{label:`Loading catalog...`})},p=e=>{var t=iz(),n=N(t,!0);E(t),I(()=>V(n,$.catalogError)),B(e,t)},m=e=>{var t=dz(),r=P(t),i=e=>{var t=az(),n=N(t,!0);E(t),I(()=>V(n,$.catalog.instructions)),B(e,t)};H(r,e=>{$.catalog.instructions&&e(i)});var a=F(r,2);U(a,17,()=>L(n),e=>e.key,(e,t)=>{var n=lz(),r=N(n),i=N(r,!0);E(r);var a=F(r,2);U(a,21,()=>L(t).items,e=>e.key,(e,t)=>{var n=cz(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{var n=oz(),r=N(n,!0);E(n),I(()=>{G(n,`title`,`Exposed on the aggregated /mcp endpoint as `+L(t).aggregated),V(r,L(t).aggregated)}),B(e,n)};H(a,e=>{L(t).aggregated&&e(o)});var s=F(a,2),c=e=>{var n=sz(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(s,e=>{L(t).description&&e(c)}),E(n),I(()=>{G(r,`title`,L(t).aggregated||L(t).name),V(i,L(t).name)}),B(e,n)}),E(a),E(n),I(()=>V(i,L(t).title)),B(e,n)});var o=F(a,2),s=e=>{B(e,uz())},c=k(()=>Bx($.catalog));H(o,e=>{L(c)&&e(s)}),B(e,t)};H(d,e=>{$.catalogLoading?e(f):$.catalogError?e(p,1):e(m,-1)});var h=F(d,2),g=N(h);E(h),E(r),I((e,t)=>{V(c,$.catalog.server),W(l,1,`audit-status-badge ${e??``}`,`svelte-1xqrzco`),V(u,t)},[()=>Ex($.catalog),()=>Tx($.catalog)]),R(`click`,g,()=>$.closeCatalog()),B(e,r)},$$slots:{default:!0}}),O()}Vr([`click`]);var mz=z(`

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

          `),hz=z(` Human-readable and Unicode-friendly. You can change it later.`,1),gz=z(`Derived from the name. You may edit it before saving.`),_z=z(`Immutable because it is used in URLs, scope headers, and aggregated tool names.`),vz=z(` `,1),yz=z(` stdio servers are config-only: declare them in config.yaml under mcp.servers.`,1),bz=z(``),xz=z(`
          `),Sz=z(`
          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 Cz(e,t){D(t,!0);{let t=e=>{B(e,mz())},n=k(()=>$.formMode===`edit`?`Edit MCP Server`:`Add MCP Server`);ME(e,{get open(){return $.formOpen},get title(){return L(n)},ariaLabel:`MCP server editor`,get error(){return $.error},get submitting(){return $.formSubmitting},onclose:()=>$.closeForm(),onsubmit:()=>$.submitForm(),headerHint:t,children:(e,t)=>{var n=Sz(),r=P(n);PE(r,{id:`mcp-server-name`,label:`Name`,children:(e,t)=>{var n=hz(),r=P(n);ta(r),He(2),R(`input`,r,()=>$.syncSlugFromName()),ua(r,()=>$.form.name,e=>$.form.name=e),B(e,n)},$$slots:{default:!0}});var i=F(r,2);PE(i,{id:`mcp-server-slug`,label:`Slug`,children:(e,t)=>{var n=vz(),r=P(n);ta(r);var i=F(r,2),a=e=>{B(e,gz())},o=e=>{B(e,_z())};H(i,e=>{$.formMode===`create`?e(a):e(o,-1)}),I(()=>r.disabled=$.formMode===`edit`),R(`input`,r,()=>$.markSlugEdited()),ua(r,()=>$.form.slug,e=>$.form.slug=e),B(e,n)},$$slots:{default:!0}});var a=F(i,2);PE(a,{id:`mcp-server-transport`,label:`Transport`,children:(e,t)=>{var n=yz(),r=P(n),i=N(r);i.value=i.__value=`http`;var a=F(i);a.value=a.__value=`sse`,E(r),He(2),Wi(r,()=>$.form.transport,e=>$.form.transport=e),B(e,n)},$$slots:{default:!0}});var o=F(a,2);PE(o,{id:`mcp-server-url`,label:`URL`,children:(e,t)=>{var n=bz();ta(n),ua(n,()=>$.form.url,e=>$.form.url=e),B(e,n)},$$slots:{default:!0}});var s=F(o,2),c=F(N(s),2);U(c,21,()=>$.form.headers,ai,(e,t,n)=>{var r=xz(),i=N(r);ta(i);var a=F(i,2);ta(a),OT(F(a,2),{label:`Remove header`,class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>$.removeHeader(n),children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}}),E(r),ua(i,()=>L(t).name,e=>L(t).name=e),ua(a,()=>L(t).value,e=>L(t).value=e),B(e,r)}),E(c);var l=F(c,2),u=N(l);q(N(u),{get icon(){return mo},class:`form-action-icon`}),He(2),E(u),E(l),He(2),E(s);var d=F(s,2),f=N(d);MA(N(f),{get enabled(){return $.form.enabled},label:`MCP server`,onclick:()=>$.form.enabled=!$.form.enabled}),E(f),E(d);var p=F(d,2),m=F(N(p),2),h=N(m),g=F(N(h),2);ta(g),E(h);var _=F(h,2),v=F(N(_),2);ta(v),E(_);var y=F(_,2),b=F(N(y),2);ta(b),E(y);var x=F(y,2),S=F(N(x),2);dt(S),G(S,`placeholder`,`/ +/team/alpha`),E(x);var C=F(x,2),w=F(N(C),2);ta(w),E(C),E(m),E(p),I(()=>p.open=$.advancedOpen),R(`click`,u,()=>$.addHeader()),Br(`toggle`,p,e=>$.advancedOpen=e.currentTarget.open),ua(g,()=>$.form.description,e=>$.form.description=e),ua(v,()=>$.form.allowed_tools,e=>$.form.allowed_tools=e),ua(b,()=>$.form.disallowed_tools,e=>$.form.disallowed_tools=e),ua(S,()=>$.form.user_paths,e=>$.form.user_paths=e),ua(w,()=>$.form.tool_timeout_seconds,e=>$.form.tool_timeout_seconds=e),B(e,n)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`input`,`click`]);var wz=z(`Config`),Tz=z(`
          `),Ez=z(`
          `),Dz=z(`
          NameTransportEndpointStatusToolsEnabledActions
          `);function Oz(e,t){D(t,!0);function n(e){return Dx(e,e=>ys.formatTimestamp(e))}var r=Dz(),i=N(r),a=F(N(i));U(a,21,()=>$.filtered,e=>wx(e),(e,t)=>{var r=Ez(),i=N(r),a=N(i),o=N(a,!0);E(a);var s=F(a,2),c=e=>{B(e,wz())};H(s,e=>{L(t).managed&&e(c)});var l=F(s,2),u=N(l,!0);E(l),E(i);var d=F(i),f=N(d),p=N(f,!0);E(f),E(d);var m=F(d),h=N(m,!0);E(m);var g=F(m),_=N(g),v=N(_,!0);E(_);var y=F(_,2),b=e=>{var n=Tz(),r=N(n,!0);E(n),I(()=>V(r,L(t).last_error)),B(e,n)},x=k(()=>Tx(L(t))===`degraded`&&L(t).last_error);H(y,e=>{L(x)&&e(b)}),E(g);var S=F(g),C=N(S),w=N(C,!0);E(C);var T=F(C,2),ee=N(T,!0);E(T),E(S);var te=F(S),ne=N(te),re=N(ne,!0);E(ne),E(te);var ie=F(te),ae=N(ie),oe=N(ae),se=e=>{{let n=k(()=>`Edit MCP server `+L(t).name);OT(e,{get label(){return L(n)},class:`table-icon-btn`,onclick:()=>$.openEdit(L(t)),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(oe,e=>{L(t).managed||e(se)});var ce=F(oe,2);{let e=k(()=>`Inspect catalog of MCP server `+L(t).name);OT(ce,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>$.openCatalog(L(t)),children:(e,t)=>{q(e,{get icon(){return io},class:`form-action-icon`})},$$slots:{default:!0}})}var le=F(ce,2);{let e=k(()=>($.reconnectingName===wx(L(t))?`Reconnecting MCP server `:`Reconnect MCP server `)+L(t).name),n=k(()=>$.reconnectingName===wx(L(t)));OT(le,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>$.reconnectServer(L(t)),get disabled(){return L(n)},children:(e,t)=>{q(e,{get icon(){return go},class:`form-action-icon`})},$$slots:{default:!0}})}var ue=F(le,2),de=e=>{{let n=k(()=>($.deletingName===wx(L(t))?`Deleting MCP server `:`Delete MCP server `)+L(t).name),r=k(()=>$.deletingName===wx(L(t)));OT(e,{get label(){return L(n)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>$.deleteServer(L(t)),get disabled(){return L(r)},children:(e,t)=>{q(e,{get icon(){return Ro},class:`table-icon-svg`})},$$slots:{default:!0}})}};H(ue,e=>{L(t).managed||e(de)}),E(ae),E(ie),E(r),I((e,n,r,i,a,s,c,l)=>{V(o,L(t).name),V(u,e),V(p,L(t).transport||`http`),G(m,`title`,n),V(h,r),W(_,1,`audit-status-badge ${i??``}`,`svelte-ah8nrt`),G(_,`title`,a),V(v,s),V(w,c),V(ee,l),W(ne,1,Pi([`auth-key-status-badge`,L(t).enabled?`auth-key-status-active`:`auth-key-status-inactive`])),V(re,L(t).enabled?`Enabled`:`Disabled`)},[()=>wx(L(t)),()=>Ox(L(t)),()=>Ox(L(t)),()=>Ex(L(t)),()=>n(L(t)),()=>Tx(L(t)),()=>_c(L(t).tool_count||0),()=>kx(L(t))]),B(e,r)}),E(a),E(i),E(r),B(e,r),O()}var kz=z(`

          MCP Servers

          `),Az=z(``),jz=z(`
          MCP server management is unavailable.
          `),Mz=z(``),Nz=z(`
          `),Pz=z(`

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

          `),Fz=z(`

          No MCP servers match your filter.

          `),Iz=z(`
          `);function Lz(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`mcp-servers`&&$.fetchServers()});var n=Iz(),r=N(n),i=N(r);iC(N(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=>{B(e,kz())},$$slots:{title:!0}}),E(i);var a=F(i,2),o=N(a),s=e=>{var t=Az();q(N(t),{get icon(){return mo},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=$.formSubmitting),R(`click`,t,()=>$.openCreate()),B(e,t)};H(o,e=>{$.available&&!J.authError&&e(s)}),E(a),E(r);var c=F(r,2),l=e=>{B(e,jz())};H(c,e=>{!$.available&&!J.authError&&e(l)});var u=F(c,2),d=e=>{var t=Mz(),n=N(t,!0);E(t),I(()=>V(n,$.error)),B(e,t)};H(u,e=>{$.error&&!J.authError&&!$.formOpen&&e(d)});var f=F(u,2),p=e=>{ET(e,{label:`Loading MCP servers...`})};H(f,e=>{$.loading&&!J.authError&&e(p)});var m=F(f,2),h=e=>{var t=Nz(),n=N(t);jw(N(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 $.filter},set value(e){$.filter=e}}),E(n),E(t),B(e,t)};H(m,e=>{($.servers.length>0||$.filter)&&$.available&&!J.authError&&e(h)});var g=F(m,2);Cz(g,{});var _=F(g,2);pz(_,{});var v=F(_,2),y=e=>{Oz(e,{})};H(v,e=>{$.filtered.length>0&&$.available&&!J.authError&&e(y)});var b=F(v,2),x=e=>{B(e,Pz())};H(b,e=>{$.servers.length===0&&!$.filter&&!$.loading&&!J.authError&&!$.error&&$.available&&e(x)});var S=F(b,2),C=e=>{B(e,Fz())};H(S,e=>{$.servers.length>0&&$.filtered.length===0&&$.filter&&!$.loading&&!J.authError&&$.available&&e(C)}),E(n),B(e,n),O()}Vr([`click`]);var Rz=`api_keys`,zz=`session_sticky_keys`,Bz=`base_url`,Vz=`service_account_json`,Hz=`models`,Uz={[Rz]:{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.`},[zz]:{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.`},[Bz]:{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.`},[Vz]:{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`},[Hz]:{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 Wz(e){return Uz[e]||{label:String(e||``).split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `),control:`text`}}function Gz(){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 Kz(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 qz(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 Jz(e,t){let n=String(t||``).trim();return n&&(Array.isArray(e)?e:[]).find(e=>String(e&&e.type||``).trim()===n)||null}function Yz(e,t){let n=e&&Array.isArray(e.fields)&&e.fields.length>0?e.fields:Object.keys(Uz).map(e=>({name:e,advanced:e!==Rz})),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={...Wz(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 Xz=new Set([`name`,`type`,`enabled`]);function Zz(e,t){let n=new Set([...t.primary||[],...t.advanced||[]].map(e=>e.name)),r=Gz(),i={...e};for(let e of Object.keys(r))!Xz.has(e)&&!n.has(e)&&(i[e]=r[e]);return i}function Qz(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 $z(e){let t=Array.isArray(e&&e.models)?e.models:[];return t.length===0?`auto-discovered`:t.length+` model`+(t.length===1?``:`s`)}function eB(e){return(Array.isArray(e)?e:[]).map(e=>({value:String(e||``)}))}function tB(e){return(Array.isArray(e)?e:[]).map(e=>String(e&&e.value||``))}function nB(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 rB(e){return{name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),api_keys:eB(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 iB(e){let t=String(e||``).trim();return t.length>=3&&/^\*+$/.test(t)}function aB(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}=Yz(r);for(let t of[...o,...s]){let n=oB(e,t);n&&(i[t.name]=n)}return i}function oB(e,t){if(t.name===`api_keys`){let n=tB(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`&&!iB(n))try{JSON.parse(n)}catch{return`Paste the service account JSON file's contents — this is not valid JSON.`}return``}function sB(e,t){let n={name:String(e&&e.name||``).trim(),type:String(e&&e.type||``).trim(),enabled:!!(e&&e.enabled)},{primary:r,advanced:i}=Yz(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]=cB(e,t.name));for(let t of Object.keys(Uz)){if(o.has(t)||t===`session_sticky_keys`)continue;let r=cB(e,t);(Array.isArray(r)?r.length>0:String(r).trim()!==``)&&(n[t]=r)}return n}function cB(e,t){switch(t){case Rz:return tB(e&&e.api_keys);case Hz:return hc(e&&e.models);case zz:return!!(e&&e.session_sticky_keys);case Vz:return e&&e.service_account_json||``;default:return String(e&&e[t]||``).trim()}}var lB=new class{#e=A(M([]));get rows(){return L(this.#e)}set rows(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get formOpen(){return L(this.#a)}set formOpen(e){j(this.#a,e,!0)}#o=A(!1);get formSubmitting(){return L(this.#o)}set formSubmitting(e){j(this.#o,e,!0)}#s=A(`create`);get formMode(){return L(this.#s)}set formMode(e){j(this.#s,e,!0)}#c=A(!1);get advancedOpen(){return L(this.#c)}set advancedOpen(e){j(this.#c,e,!0)}#l=A(M(Gz()));get form(){return L(this.#l)}set form(e){j(this.#l,e,!0)}#u=A(M({}));get fieldErrors(){return L(this.#u)}set fieldErrors(e){j(this.#u,e,!0)}#d=A(``);get focusField(){return L(this.#d)}set focusField(e){j(this.#d,e,!0)}#f=A(``);get deletingName(){return L(this.#f)}set deletingName(e){j(this.#f,e,!0)}#p=A(!1);get deleteSubmitting(){return L(this.#p)}set deleteSubmitting(e){j(this.#p,e,!0)}#m=A(M([]));get types(){return L(this.#m)}set types(e){j(this.#m,e,!0)}#h=A(!1);get typesLoaded(){return L(this.#h)}set typesLoaded(e){j(this.#h,e,!0)}#g=null;get filteredRows(){return Kz(this.rows,this.filter)}get schema(){return Jz(this.types,this.form.type)}get formFields(){if(!String(this.form.type||``).trim())return{primary:[],advanced:[]};let e=this.schema;return Yz(e,e&&e.default_base_url)}async fetchTypes(){let e=await kT(`/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 kT(`/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`,Gz()),this.formOpen=!0,this.typesLoaded||this.fetchTypes()}openEdit(e){!e||e.managed||(this.#_(`edit`,rB(e)),this.formOpen=!0,this.typesLoaded||this.fetchTypes())}closeForm(){this.formOpen=!1,this.#_(`create`,Gz())}selectType(){this.fieldErrors={};let e=this.formFields;this.formMode===`create`&&(this.form=Zz(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=bs(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(){Wc.fetchModels(),Wc.fetchCategories()}async submitForm(){let e=this.schema,t=aB(this.form,this.formMode,this.rows,e);if(Object.keys(t).length>0){this.fieldErrors=t,this.error=``,this.#b();return}let n=sB(this.form,e);this.error=``,this.fieldErrors={},this.formSubmitting=!0;try{let e=await AT(`/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}Y.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 AT(`/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,Ys.error=t.error;return}if(t.status===`error`){Ys.error=t.error;return}Y.success(`Provider "`+e+`" deleted.`),Ys.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||Ys.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:jo,dialogClass:`budget-reset-dialog`,onConfirm:()=>this.performDelete(t)})}},uB=z(`Config`),dB=z(` `,1),fB=z(`
          `),pB=z(`
          NameTypeBase URLAuthModelsEnabledUpdatedActions
          `);function mB(e,t){D(t,!0);var n=pB(),r=N(n),i=F(N(r));U(i,21,()=>lB.filteredRows,e=>e.name,(e,t)=>{var n=fB(),r=N(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2),s=e=>{B(e,uB())};H(o,e=>{L(t).managed&&e(s)}),E(r);var c=F(r),l=N(c),u=N(l,!0);E(l),E(c);var d=F(c),f=N(d,!0);E(d);var p=F(d),m=N(p,!0);E(p);var h=F(p),g=N(h,!0);E(h);var _=F(h),v=N(_);let y;var b=N(v,!0);E(v),E(_);var x=F(_),S=N(x,!0);E(x);var C=F(x),w=N(C),T=N(w),ee=e=>{var n=dB(),r=P(n);{let e=k(()=>`Edit provider `+L(t).name);OT(r,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>lB.openEdit(L(t)),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}var i=F(r,2);{let e=k(()=>(lB.deletingName===L(t).name?`Deleting provider `:`Delete provider `)+L(t).name),n=k(()=>lB.deletingName===L(t).name);OT(i,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>lB.requestDelete(L(t).name),get disabled(){return L(n)},children:(e,t)=>{q(e,{get icon(){return Ro},class:`table-icon-svg`})},$$slots:{default:!0}})}B(e,n)};H(T,e=>{L(t).managed||e(ee)}),E(w),E(C),E(n),I((e,n,r)=>{V(a,L(t).name),V(u,L(t).type),G(d,`title`,L(t).base_url||``),V(f,L(t).base_url||`—`),V(m,e),V(g,n),y=W(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":L(t).enabled,"auth-key-status-inactive":!L(t).enabled}),V(b,L(t).enabled?`Enabled`:`Disabled`),V(S,r)},[()=>Qz(L(t)),()=>$z(L(t)),()=>ys.formatTimestamp(L(t).updated_at)]),B(e,n)}),E(i),E(r),E(n),B(e,n),O()}var hB=z(``),gB=z(`
          `),_B=z(`
          `,1),vB=z(``),yB=z(``),bB=z(``),xB=z(``),SB=z(``),CB=z(` `),wB=z(` `),TB=z(`
          `);function EB(e,t){D(t,!0);let n=k(()=>`provider-credential-`+t.field.name),r=k(()=>lB.fieldErrors[t.field.name]||``),i=k(()=>L(r)?L(n)+`-error`:t.field.hint?L(n)+`-hint`:void 0),a=k(()=>{let e=String(lB.form[t.field.name]||``).trim();return!e||t.field.options.includes(e)?t.field.options:[...t.field.options,e]});function o(){lB.clearFieldError(t.field.name)}var s=TB(),c=N(s),l=N(c),u=F(l),d=e=>{B(e,hB())};H(u,e=>{t.field.required&&e(d)}),E(c);var f=F(c,2),p=e=>{var t=_B(),a=P(t);U(a,21,()=>lB.form.api_keys,ai,(e,t,a)=>{var s=gB(),c=N(s);ta(c),G(c,`aria-label`,`API key `+(a+1)),OT(F(c,2),{label:`Remove API key `+(a+1),class:`table-action-btn-danger table-icon-btn vm-target-remove`,onclick:()=>lB.removeApiKeyRow(a),children:(e,t)=>{q(e,{get icon(){return jo},class:`table-icon-svg`})},$$slots:{default:!0}}),E(s),I(()=>{G(c,`id`,a===0?L(n):L(n)+`-`+a),G(c,`aria-invalid`,L(r)?`true`:void 0),G(c,`aria-describedby`,a===0?L(i):void 0)}),R(`input`,c,o),ua(c,()=>L(t).value,e=>L(t).value=e),B(e,s)}),E(a);var s=F(a,2),c=N(s);q(N(c),{get icon(){return mo},class:`form-action-icon`}),He(2),E(c),E(s),I(()=>G(c,`id`,lB.form.api_keys.length===0?L(n):void 0)),R(`click`,c,()=>lB.addApiKeyRow()),B(e,t)},m=e=>{var s=yB(),c=N(s);c.value=c.__value=``,U(F(c),16,()=>L(a),e=>e,(e,t)=>{var n=vB(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(s),I(()=>{G(s,`id`,L(n)),G(s,`aria-invalid`,L(r)?`true`:void 0),G(s,`aria-describedby`,L(i))}),R(`change`,s,o),Wi(s,()=>lB.form[t.field.name],e=>lB.form[t.field.name]=e),B(e,s)},h=e=>{var a=bB();ta(a),I(()=>{G(a,`id`,L(n)),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`change`,a,o),da(a,()=>lB.form[t.field.name],e=>lB.form[t.field.name]=e),B(e,a)},g=e=>{var a=xB();dt(a),I(()=>{G(a,`id`,L(n)),G(a,`placeholder`,t.field.placeholder||``),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`input`,a,o),ua(a,()=>lB.form[t.field.name],e=>lB.form[t.field.name]=e),B(e,a)},_=e=>{var a=SB();ta(a),I(()=>{G(a,`id`,L(n)),G(a,`placeholder`,t.field.placeholder||``),G(a,`aria-invalid`,L(r)?`true`:void 0),G(a,`aria-describedby`,L(i))}),R(`input`,a,o),ua(a,()=>lB.form[t.field.name],e=>lB.form[t.field.name]=e),B(e,a)};H(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=F(f,2),y=e=>{var t=CB(),i=N(t,!0);E(t),I(()=>{G(t,`id`,L(n)+`-error`),V(i,L(r))}),B(e,t)},b=e=>{var r=wB(),i=N(r,!0);E(r),I(()=>{G(r,`id`,L(n)+`-hint`),V(i,t.field.hint)}),B(e,r)};H(v,e=>{L(r)?e(y):t.field.hint&&e(b,1)}),E(s),I(()=>{G(c,`for`,L(n)),V(l,`${t.field.label??``} `)}),B(e,s),O()}Vr([`input`,`click`,`change`]);var DB=z(`

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

          `),OB=z(``),kB=z(` `),AB=z(`Determines which fields the gateway uses to build requests.`),jB=z(` `),MB=z(`Suggested from the selected type; used to route requests to this provider instance and editable before saving.`),NB=z(`Immutable once created.`),PB=z(`

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

          `),FB=z(`
          Advanced settings
          `),IB=z(`
          `,1);function LB(e,t){D(t,!0);let n=k(()=>qz(lB.types,lB.form.type)),r=k(()=>lB.formFields),i=k(()=>lB.fieldErrors.name||``),a=k(()=>lB.fieldErrors.type||``);function o(){lB.selectType(),lB.formMode===`create`&&(lB.form.name=nB(lB.rows,lB.form.type))}kn(()=>{let e=lB.focusField;if(!e)return;lB.focusField=``;let t=document.getElementById(`provider-credential-`+e);t&&(t.scrollIntoView({block:`center`}),t.focus({preventScroll:!0}))});{let t=e=>{B(e,DB())},s=k(()=>lB.formMode===`edit`?`Edit Provider`:`Add Provider`);ME(e,{get open(){return lB.formOpen},get title(){return L(s)},ariaLabel:`Provider credential editor`,get error(){return lB.error},get submitting(){return lB.formSubmitting},novalidate:!0,onclose:()=>lB.closeForm(),onsubmit:()=>lB.submitForm(),headerHint:t,children:(e,t)=>{var s=IB(),c=P(s),l=F(N(c),2),u=N(l);u.value=u.__value=``,U(F(u),16,()=>L(n),e=>e,(e,t)=>{var n=OB(),r=N(n,!0);E(n);var i={};I(()=>{V(r,t),i!==(i=t)&&(n.value=(n.__value=t)??``)}),B(e,n)}),E(l);var d=F(l,2),f=e=>{var t=kB(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)},p=e=>{B(e,AB())};H(d,e=>{L(a)?e(f):e(p,-1)}),E(c);var m=F(c,2),h=F(N(m),2);ta(h);var g=F(h,2),_=e=>{var t=jB(),n=N(t,!0);E(t),I(()=>V(n,L(i))),B(e,t)},v=e=>{B(e,MB())},y=e=>{B(e,NB())};H(g,e=>{L(i)?e(_):lB.formMode===`create`?e(v,1):e(y,-1)}),E(m);var b=F(m,2),x=e=>{B(e,PB())};H(b,e=>{lB.form.type||e(x)});var S=F(b,2);U(S,17,()=>L(r).primary,e=>e.name,(e,t)=>{EB(e,{get field(){return L(t)}})});var C=F(S,2),w=N(C);MA(N(w),{get enabled(){return lB.form.enabled},label:`provider`,onclick:()=>lB.form.enabled=!lB.form.enabled}),E(w),E(C);var T=F(C,2),ee=e=>{var t=FB(),n=N(t),i=N(n),a=F(N(i),2),o=N(a,!0);E(a),E(i),E(n);var s=F(n,2);U(s,21,()=>L(r).advanced,e=>e.name,(e,t)=>{EB(e,{get field(){return L(t)}})}),E(s),E(t),I(e=>{t.open=lB.advancedOpen,V(o,e)},[()=>L(r).advanced.map(e=>e.label).join(`, `)]),Br(`toggle`,t,e=>lB.advancedOpen=e.currentTarget.open),B(e,t)};H(T,e=>{L(r).advanced.length>0&&e(ee)}),I(()=>{l.disabled=lB.formMode===`edit`,G(l,`aria-invalid`,L(a)?`true`:void 0),G(l,`aria-describedby`,L(a)?`provider-credential-type-error`:`provider-credential-type-hint`),h.disabled=lB.formMode===`edit`,G(h,`aria-invalid`,L(i)?`true`:void 0),G(h,`aria-describedby`,L(i)?`provider-credential-name-error`:`provider-credential-name-hint`)}),R(`change`,l,o),Wi(l,()=>lB.form.type,e=>lB.form.type=e),R(`input`,h,()=>lB.clearFieldError(`name`)),ua(h,()=>lB.form.name,e=>lB.form.name=e),B(e,s)},$$slots:{headerHint:!0,default:!0}})}O()}Vr([`change`,`input`]);var RB=z(`

          Providers

          `),zB=z(``),BB=z(`
          Provider credential management is unavailable.
          `),VB=z(``),HB=z(`
          `),UB=z(`

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

          `),WB=z(`

          No providers match your filter.

          `),GB=z(`
          `);function KB(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`providers-config`&&lB.fetchPage()});var n=GB(),r=N(n),i=N(r);iC(N(i),{copyId:`providers-config-help-copy`,label:`model providers help`,title:e=>{B(e,RB())},help:e=>{He(),B(e,Xr(`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}}),E(i);var a=F(i,2),o=N(a),s=e=>{var t=zB();q(N(t),{get icon(){return mo},class:`form-action-icon`}),He(2),E(t),I(()=>t.disabled=lB.formSubmitting),R(`click`,t,()=>lB.openCreate()),B(e,t)};H(o,e=>{lB.available&&!J.needsAuth&&e(s)}),E(a),E(r);var c=F(r,2),l=e=>{B(e,BB())};H(c,e=>{!lB.available&&!J.needsAuth&&e(l)});var u=F(c,2),d=e=>{var t=VB(),n=N(t,!0);E(t),I(()=>V(n,lB.error)),B(e,t)};H(u,e=>{lB.error&&!J.needsAuth&&!lB.formOpen&&e(d)});var f=F(u,2),p=e=>{ET(e,{label:`Loading providers...`})};H(f,e=>{lB.loading&&!J.needsAuth&&e(p)});var m=F(f,2),h=e=>{var t=HB(),n=N(t);jw(N(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 lB.filter},set value(e){lB.filter=e}}),E(n),E(t),B(e,t)};H(m,e=>{(lB.rows.length>0||lB.filter)&&lB.available&&!J.needsAuth&&e(h)});var g=F(m,2);LB(g,{});var _=F(g,2),v=e=>{mB(e,{})};H(_,e=>{lB.filteredRows.length>0&&lB.available&&!J.needsAuth&&e(v)});var y=F(_,2),b=e=>{B(e,UB())};H(y,e=>{lB.rows.length===0&&!lB.filter&&!lB.loading&&!J.needsAuth&&!lB.error&&lB.available&&e(b)});var x=F(y,2),S=e=>{B(e,WB())};H(x,e=>{lB.rows.length>0&&lB.filteredRows.length===0&&lB.filter&&!lB.loading&&!J.needsAuth&&lB.available&&e(S)}),E(n),B(e,n),O()}Vr([`click`]);function qB(){return{name:``,description:``,user_path:``,labels:``,dashboard_access:!1,expires_at:``}}function JB(e){let t=[];for(let n of String(e||``).split(`,`)){let e=n.trim();e&&!t.includes(e)&&t.push(e)}return t}function YB(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 XB(e){if(YB(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 ZB(e){let t=e||{},n=String(t.name||``).trim();if(!n)return{error:`Name is required.`};let r=YB(t.user_path);if(r)return{error:r};let i=XB(t.user_path),a=JB(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 QB(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 $B(e){return e?!!e.deactivated_at||e.enabled===!1:!1}function eV(e,t=Date.now()){return!e||e.active===!1||$B(e)?!1:!QB(e,t)}function tV(e){return[e.name,e.description,e.user_path,e.redacted_value,...e.labels||[]].filter(Boolean).join(` `).toLowerCase()}function nV(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&&!eV(e,i)?!1:!a||tV(e).includes(a))}function rV(e,t){return $B(e)?2:+!eV(e,t)}function iV(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 aV(e){let t=Date.parse(e&&e.deactivated_at||``);return Number.isFinite(t)?t:-1/0}function oV(e,t=Date.now()){return(Array.isArray(e)?e.slice():[]).sort((e,n)=>{let r=rV(e,t),i=rV(n,t);if(r!==i)return r-i;let[a,o]=r===2?[aV(e),aV(n)]:[iV(e),iV(n)];return a===o?String(e.name||``).localeCompare(String(n.name||``)):a>o?-1:1})}function sV(e,t=Date.now()){return(Array.isArray(e)?e:[]).reduce((e,n)=>e+ +!eV(n,t),0)}function cV(){return{open:!1,id:``,name:``,value:``,submitting:!1,error:``}}var lV=new class{#e=A(M([]));get keys(){return L(this.#e)}set keys(e){j(this.#e,e,!0)}#t=A(!0);get available(){return L(this.#t)}set available(e){j(this.#t,e,!0)}#n=A(!1);get loading(){return L(this.#n)}set loading(e){j(this.#n,e,!0)}#r=A(``);get error(){return L(this.#r)}set error(e){j(this.#r,e,!0)}#i=A(``);get filter(){return L(this.#i)}set filter(e){j(this.#i,e,!0)}#a=A(!1);get showInactive(){return L(this.#a)}set showInactive(e){j(this.#a,e,!0)}#o=k(()=>oV(nV(this.keys,{query:this.filter,showInactive:this.showInactive})));get visibleKeys(){return L(this.#o)}set visibleKeys(e){j(this.#o,e)}#s=k(()=>sV(this.keys));get inactiveCount(){return L(this.#s)}set inactiveCount(e){j(this.#s,e)}#c=A(!1);get formOpen(){return L(this.#c)}set formOpen(e){j(this.#c,e,!0)}#l=A(!1);get formSubmitting(){return L(this.#l)}set formSubmitting(e){j(this.#l,e,!0)}#u=A(``);get issuedValue(){return L(this.#u)}set issuedValue(e){j(this.#u,e,!0)}#d=A(``);get deactivatingID(){return L(this.#d)}set deactivatingID(e){j(this.#d,e,!0)}#f=A(``);get dashboardAccessID(){return L(this.#f)}set dashboardAccessID(e){j(this.#f,e,!0)}#p=A(M(qB()));get form(){return L(this.#p)}set form(e){j(this.#p,e,!0)}#m=A(M(cV()));get labelsEditor(){return L(this.#m)}set labelsEditor(e){j(this.#m,e,!0)}copyState=kM({logPrefix:`Failed to copy auth key:`});async fetchKeys(){this.loading=!0,this.error=``;try{let e=await kT(`/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=qB()))}closeForm(){this.formOpen&&(this.formOpen=!1,this.error=``,this.copyState.reset(),!this.formSubmitting&&!this.issuedValue&&(this.form=qB()))}copyIssuedValue(){return this.copyState.copy(this.issuedValue)}dismissIssuedKey(){this.issuedValue=``,this.copyState.reset(),this.form=qB()}async submitForm(){let e=ZB(this.form);if(e.error){this.error=e.error;return}this.error=``,this.formSubmitting=!0;try{let t=await AT(`/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=qB(),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=cV())}async submitLabelsEditor(){let e=this.labelsEditor;if(!e.open||e.submitting||!e.id)return;e.submitting=!0,e.error=``;let t={labels:JB(e.value)};try{let n=await AT(`/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}Y.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 AT(`/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,Y.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),Y.error(n.error);return}Y.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 AT(`/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,Y.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),Y.error(t.error);return}Y.success(`Key "`+e.name+`" deactivated.`),this.fetchKeys()}finally{this.deactivatingID=``}}}},uV=z(``),dV=z(`

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

          `),fV=z(``),pV=z(``),mV=z(``),hV=z(``),gV=z(`
          `);function _V(e,t){D(t,!0);{let t=k(()=>lV.issuedValue?``:lV.error),n=k(()=>lV.issuedValue?`Done, I’ve stored it`:`Create API Key`),r=k(()=>lV.issuedValue?Va:mo);ME(e,{get open(){return lV.formOpen},title:`Create API Key`,ariaLabel:`API key editor`,get error(){return L(t)},get submitting(){return lV.formSubmitting},get submitLabel(){return L(n)},submittingLabel:`Creating...`,get submitIcon(){return L(r)},cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>lV.closeForm(),onsubmit:()=>lV.issuedValue?lV.dismissIssuedKey():lV.submitForm(),children:(e,t)=>{var n=Zr(),r=P(n),i=e=>{var t=dV(),n=F(N(t),2),r=N(n),i=N(r,!0);E(r),OL(F(r,2),{get state(){return lV.copyState},onclick:()=>lV.copyIssuedValue()}),E(n);var a=F(n,2),o=e=>{B(e,uV())};H(a,e=>{lV.copyState.error&&e(o)}),E(t),I(()=>V(i,lV.issuedValue)),B(e,t)},a=e=>{var t=gV(),n=N(t),r=N(n),i=F(N(r),2);ta(i),E(r);var a=F(r,2),o=F(N(a),2);ta(o),E(a),E(n);var s=F(n,2),c=N(s);iC(c,{copyId:`auth-key-user-path-help-copy`,label:`API key user path help`,title:e=>{B(e,fV())},help:e=>{He(),B(e,Xr(`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=F(c,2);ta(l),E(s);var u=F(s,2),d=N(u);iC(d,{copyId:`auth-key-labels-help-copy`,label:`API key labels help`,title:e=>{B(e,pV())},help:e=>{He(),B(e,Xr(`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=F(d,2);ta(f),E(u);var p=F(u,2),m=N(p);iC(m,{copyId:`auth-key-dashboard-access-help-copy`,label:`API key dashboard access help`,title:e=>{B(e,mV())},help:e=>{He(),B(e,Xr(`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=F(m,2),g=N(h);ta(g),He(2),E(h),E(p),PE(F(p,2),{id:`auth-key-description`,label:`Description (optional)`,children:(e,t)=>{var n=hV();dt(n),ua(n,()=>lV.form.description,e=>lV.form.description=e),B(e,n)},$$slots:{default:!0}}),E(t),ua(i,()=>lV.form.name,e=>lV.form.name=e),ua(o,()=>lV.form.expires_at,e=>lV.form.expires_at=e),ua(l,()=>lV.form.user_path,e=>lV.form.user_path=e),ua(f,()=>lV.form.labels,e=>lV.form.labels=e),da(g,()=>lV.form.dashboard_access,e=>lV.form.dashboard_access=e),B(e,t)};H(r,e=>{lV.issuedValue?e(i):e(a,-1)}),B(e,n)},$$slots:{default:!0}})}O()}var vV=z(`

          `),yV=z(`

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

          `,1);function bV(e,t){D(t,!0),ME(e,{get open(){return lV.labelsEditor.open},title:`Edit Labels`,ariaLabel:`API key labels editor`,get error(){return lV.labelsEditor.error},get submitting(){return lV.labelsEditor.submitting},submitLabel:`Save Labels`,cancel:!1,dialogClass:`auth-key-editor`,onclose:()=>lV.closeLabelsEditor(),onsubmit:()=>lV.submitLabelsEditor(),headerHint:e=>{var t=vV(),n=N(t,!0);E(t),I(()=>V(n,lV.labelsEditor.name)),B(e,t)},children:(e,t)=>{PE(e,{id:`auth-key-labels-edit`,label:`Labels (comma-separated)`,children:(e,t)=>{var n=yV(),r=P(n);ta(r),He(2),ua(r,()=>lV.labelsEditor.value,e=>lV.labelsEditor.value=e),B(e,n)},$$slots:{default:!0}})},$$slots:{headerHint:!0,default:!0}}),O()}var xV=z(` `),SV=z(`
          `),CV=z(``),wV=z(`Expired`),TV=z(` `),EV=z(` `,1),DV=z(`Deactivated`),OV=z(`
          `),kV=z(`
          NameDescriptionUser PathLabelsTokenDashboard Access ExpiresCreated
          `);function AV(e,t){D(t,!0);var n=kV(),r=N(n),i=N(r),a=N(i),o=F(N(a),5),s=N(o);q(F(N(s)),{get icon(){return to},width:`13`,height:`13`}),E(s),E(o),He(3),E(a),E(i);var c=F(i);U(c,21,()=>lV.visibleKeys,e=>e.id,(e,t)=>{var n=OV();let r;var i=N(n),a=N(i,!0);E(i);var o=F(i),s=N(o,!0);E(o);var c=F(o),l=N(c,!0);E(c);var u=F(c),d=N(u),f=e=>{var n=SV();U(n,20,()=>L(t).labels||[],e=>e,(e,t)=>{var n=xV(),r=N(n,!0);E(n),I(e=>{Vi(n,e),V(r,t)},[()=>eb(t)]),B(e,n)}),E(n),B(e,n)},p=e=>{B(e,CV())};H(d,e=>{(L(t).labels||[]).length>0?e(f):e(p,-1)}),E(u);var m=F(u),h=N(m),g=N(h,!0);E(h),E(m);var _=F(m),v=N(_);let y;var b=N(v,!0);E(v),E(_);var x=F(_),S=N(x),C=e=>{var n=TV(),r=N(n),i=N(r,!0);E(r);var a=F(r,2),o=e=>{B(e,wV())},s=k(()=>QB(L(t)));H(a,e=>{L(s)&&e(o)}),E(n),I(e=>V(i,e),[()=>wc(L(t).expires_at)]),B(e,n)},w=e=>{B(e,Xr(`—`))};H(S,e=>{L(t).expires_at?e(C):e(w,-1)}),E(x);var T=F(x),ee=N(T,!0);E(T);var te=F(T),ne=N(te),re=N(ne),ie=e=>{var n=EV(),r=P(n);{let e=k(()=>(L(t).dashboard_access?`Revoke dashboard access for API key `:`Grant dashboard access to API key `)+L(t).name),n=k(()=>!!lV.dashboardAccessID);OT(r,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>lV.toggleDashboardAccess(L(t)),get disabled(){return L(n)},children:(e,n)=>{{let n=k(()=>L(t).dashboard_access?To:wo);q(e,{get icon(){return L(n)},class:`table-icon-svg`})}},$$slots:{default:!0}})}var i=F(r,2);{let e=k(()=>`Edit labels for API key `+L(t).name);OT(i,{get label(){return L(e)},class:`table-icon-btn`,onclick:()=>lV.openLabelsEditor(L(t)),children:(e,t)=>{q(e,{get icon(){return fo},class:`table-icon-svg`})},$$slots:{default:!0}})}var a=F(i,2);{let e=k(()=>(lV.deactivatingID===L(t).id?`Deactivating API key `:`Deactivate API key `)+L(t).name),n=k(()=>lV.deactivatingID===L(t).id);OT(a,{get label(){return L(e)},class:`table-action-btn-danger table-icon-btn`,onclick:()=>lV.deactivateKey(L(t)),get disabled(){return L(n)},children:(e,t)=>{q(e,{get icon(){return ho},class:`table-icon-svg`})},$$slots:{default:!0}})}B(e,n)},ae=e=>{var n=DV();I(e=>G(n,`title`,e),[()=>L(t).deactivated_at?`Deactivated on `+Tc(L(t).deactivated_at):`Deactivated`]),B(e,n)},oe=k(()=>$B(L(t)));H(re,e=>{L(t).active?e(ie):L(oe)&&e(ae,1)}),E(ne),E(te),E(n),I((e,i,o)=>{r=W(n,1,`svelte-nf0ldb`,null,r,e),V(a,L(t).name),V(s,L(t).description||`—`),V(l,L(t).user_path||`—`),V(g,L(t).redacted_value),y=W(v,1,`auth-key-status-badge`,null,y,{"auth-key-status-active":L(t).dashboard_access,"auth-key-status-inactive":!L(t).dashboard_access}),V(b,L(t).dashboard_access?`Allowed`:`Denied`),G(x,`title`,i),V(ee,o)},[()=>({"auth-key-row-deactivated":$B(L(t))}),()=>L(t).expires_at?Tc(L(t).expires_at):``,()=>ys.formatTimestamp(L(t).created_at)]),B(e,n)}),E(c),E(r),E(n),B(e,n),O()}var jV=z(``),MV=z(`
          API key management is unavailable.
          `),NV=z(``),PV=z(`

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

          `),FV=z(`
          `),IV=z(`
          `),LV=z(`

          `),RV=z(`

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

          `),zV=z(`
          `);function BV(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`auth-keys`&&lV.fetchKeys()});var n=zV(),r=N(n),i=F(N(r),2),a=N(i),o=e=>{var t=jV();q(N(t),{get icon(){return mo},class:`table-icon-svg`}),He(2),E(t),I(()=>t.disabled=lV.formSubmitting),R(`click`,t,()=>{lV.formSubmitting||lV.openForm()}),B(e,t)};H(a,e=>{lV.available&&!J.authError&&e(o)}),E(i),E(r);var s=F(r,2),c=e=>{B(e,MV())};H(s,e=>{!lV.available&&!J.authError&&e(c)});var l=F(s,2),u=e=>{var t=NV(),n=N(t,!0);E(t),I(()=>V(n,lV.error)),B(e,t)};H(l,e=>{lV.error&&!J.authError&&!lV.formOpen&&e(u)});var d=F(l,2),f=e=>{B(e,PV())};H(d,e=>{lV.available&&!J.authError&&e(f)});var p=F(d,2);_V(p,{});var m=F(p,2);bV(m,{});var h=F(m,2),g=e=>{var t=FV();NS(N(t),{size:18,label:`Loading API keys`}),E(t),B(e,t)};H(h,e=>{lV.loading&&lV.keys.length===0&&e(g)});var _=F(h,2),v=e=>{var t=IV(),n=N(t);jw(N(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 lV.filter},set value(e){lV.filter=e}}),E(n);var r=F(n,2),i=N(r),a=N(i);ta(a);var o=F(a,2),s=F(N(o)),c=e=>{var t=Xr();I(()=>V(t,`(${lV.inactiveCount??``})`)),B(e,t)};H(s,e=>{lV.inactiveCount>0&&e(c)}),E(o),E(i),E(r),E(t),da(a,()=>lV.showInactive,e=>lV.showInactive=e),B(e,t)};H(_,e=>{lV.keys.length>0&&lV.available&&e(v)});var y=F(_,2),b=e=>{AV(e,{})};H(y,e=>{lV.visibleKeys.length>0&&lV.available&&e(b)});var x=F(y,2),S=e=>{var t=LV(),n=N(t);E(t),I(()=>V(n,`No API keys match the current filter.${lV.inactiveCount>0&&!lV.showInactive?` `+lV.inactiveCount+` inactive `+(lV.inactiveCount===1?`key is`:`keys are`)+` hidden.`:``}`)),B(e,t)};H(x,e=>{lV.keys.length>0&&lV.visibleKeys.length===0&&lV.available&&e(S)});var C=F(x,2),w=e=>{B(e,RV())};H(C,e=>{lV.keys.length===0&&!lV.loading&&!J.authError&&!lV.error&&lV.available&&e(w)}),E(n),B(e,n),O()}Vr([`click`]);var VV=z(`

          Timezone

          `),HV=z(``),UV=z(``),WV=z(`
          `,1);function GV(e,t){D(t,!0);function n(){ys.saveOverride(),J.refresh()}function r(){ys.clearOverride(),J.refresh()}var i=WV(),a=P(i);iC(N(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=>{B(e,VV())},$$slots:{title:!0}}),E(a);var o=F(a,2),s=N(o),c=F(N(s),2),l=N(c),u=N(l);E(l),l.value=l.__value=``,U(F(l),17,()=>ys.options,e=>e.value,(e,t)=>{var n=HV(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(c),E(s),E(o);var d=F(o,2),f=N(d),p=e=>{var t=UV();R(`click`,t,r),B(e,t)};H(f,e=>{ys.override&&e(p)}),E(d),I(e=>V(u,`Automatic (${e??``})`),[()=>ys.detectedTimeZoneLabel()]),Br(`focus`,c,()=>ys.ensureOptions()),R(`change`,c,n),Wi(c,()=>ys.override,e=>ys.override=e),B(e,i),O()}Vr([`change`,`click`]);var KV=z(``),qV=z(`

          Failover

          `,1);function JV(e,t){D(t,!0);let n=k(()=>Q.failoverSaving||Q.failoverGenerating||Q.failoverDraftSaving||!Q.failoverAvailable||!Q.failoverEnabled());var r=qV(),i=P(r),a=F(N(i),2),o=N(a),s=N(o);q(s,{get icon(){return Io},class:`form-action-icon`});var c=F(s,2),l=N(c,!0);E(c),E(o);var u=F(o,2);q(N(u),{get icon(){return jo},class:`form-action-icon`}),He(2),E(u),E(a),E(i);var d=F(i,2),f=N(d),p=e=>{var t=KV(),n=N(t,!0);E(t),I(()=>V(n,Q.failoverError)),B(e,t)};H(f,e=>{Q.failoverError&&e(p)}),E(d),wj(F(d,2),{}),I(()=>{o.disabled=L(n),V(l,Q.failoverGenerating?`Generating...`:`Generate failover models automatically`),u.disabled=L(n)}),R(`click`,o,()=>Q.generateFailoverRules()),R(`click`,u,()=>Q.openFailoverResetDialog()),B(e,r),O()}Vr([`click`]);function YV(){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 XV(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 ZV(){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 QV=z(`

          Budget Resets

          `),$V=z(``),eH=z(`

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

          `),tH=z(``),nH=z(``),rH=z(`
          Monthly
          Weekly
          Daily
          `,1);function iH(e,t){D(t,!0);let n=A(M(YV())),r=A(!1),i=A(!1),a=A(``),o=A(!1),s=k(()=>As.budgetsVisible());async function c(){if(await As.ensureLoaded(),!As.budgetsVisible()){j(a,``);return}j(r,!0),j(a,``);try{let e=await Ts(`/admin/budgets/settings`,{label:`budget settings`});if(e.stale)return;if(!e.ok){j(a,`Unable to load budget settings.`);return}j(n,XV(e.data,L(n)),!0)}catch(e){console.error(`Failed to fetch budget settings:`,e),j(a,`Unable to load budget settings.`)}finally{j(r,!1)}}async function l(){if(!L(i)){j(i,!0);try{let e=await Es(`/admin/budgets/settings`,`PUT`,XV(L(n),L(n)),{label:`budget settings`});if(e.stale)return;if(!e.ok){Y.error(`Unable to save budget settings.`);return}j(n,XV(e.data,L(n)),!0),j(a,``),Y.success(`Budget settings saved.`)}catch(e){console.error(`Failed to save budget settings:`,e),Y.error(`Unable to save budget settings.`)}finally{j(i,!1)}}}kn(()=>{J.refreshTick,c()});var u=Zr(),d=P(u),f=e=>{var t=rH(),s=P(t),c=N(s);iC(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=>{B(e,QV())},$$slots:{title:!0}});var u=F(c,2),d=N(u),f=F(N(d),2),p=N(f);iC(p,{copyId:`budget-monthly-day-help-copy`,label:`day of month help`,external:!0,get open(){return L(o)},set open(e){j(o,e,!0)},title:e=>{B(e,$V())},$$slots:{title:!0}});var m=F(p,2);ta(m),E(f);var h=F(f,2),g=F(N(h),2);ta(g),E(h);var _=F(h,2),v=F(N(_),2);ta(v),E(_);var y=F(_,2),b=N(y),x=e=>{B(e,eH())};H(b,e=>{L(o)&&e(x)}),E(y),E(d);var S=F(d,2),C=F(N(S),2),w=F(N(C),2);U(w,21,ZV,e=>e.value,(e,t)=>{var n=tH(),r=N(n,!0);E(n);var i={};I(()=>{V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(w),E(C);var T=F(C,2),ee=F(N(T),2);ta(ee),E(T);var te=F(T,2),ne=F(N(te),2);ta(ne),E(te),He(2),E(S);var re=F(S,2),ie=F(N(re),4),ae=F(N(ie),2);ta(ae),E(ie);var oe=F(ie,2),se=F(N(oe),2);ta(se),E(oe),He(2),E(re),E(u);var ce=F(u,2),le=N(ce);q(N(le),{get icon(){return vo},class:`form-action-icon`}),He(2),E(le);var ue=F(le,2),de=e=>{NS(e,{size:16,label:`Loading budget settings`})};H(ue,e=>{L(r)&&e(de)}),E(ce),E(s);var fe=F(s,2),pe=N(fe),me=e=>{var t=nH(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)};H(pe,e=>{L(a)&&e(me)}),E(fe),I(()=>{le.disabled=L(i)||L(r),G(le,`aria-busy`,L(i)?`true`:`false`)}),ua(m,()=>L(n).monthly_reset_day,e=>L(n).monthly_reset_day=e),ua(g,()=>L(n).monthly_reset_hour,e=>L(n).monthly_reset_hour=e),ua(v,()=>L(n).monthly_reset_minute,e=>L(n).monthly_reset_minute=e),Wi(w,()=>L(n).weekly_reset_weekday,e=>L(n).weekly_reset_weekday=e),ua(ee,()=>L(n).weekly_reset_hour,e=>L(n).weekly_reset_hour=e),ua(ne,()=>L(n).weekly_reset_minute,e=>L(n).weekly_reset_minute=e),ua(ae,()=>L(n).daily_reset_hour,e=>L(n).daily_reset_hour=e),ua(se,()=>L(n).daily_reset_minute,e=>L(n).daily_reset_minute=e),R(`click`,le,l),B(e,t)};H(d,e=>{L(s)&&e(f)}),B(e,u),O()}Vr([`click`]);var aH=z(`

          Reset All Budgets

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

          `);function oH(e,t){D(t,!0);var n=Zr(),r=P(n),i=e=>{var t=aH(),n=F(N(t),2),r=N(n);q(N(r),{get icon(){return _o},class:`form-action-icon`}),He(2),E(r),E(n),E(t),I(()=>r.disabled=X.resetAllLoading),R(`click`,r,()=>X.openResetDialog()),B(e,t)},a=k(()=>As.budgetsVisible());H(r,e=>{L(a)&&e(i)}),B(e,n),O()}Vr([`click`]);function sH(){return{header:``,prefix:``,do_not_pass:!1,delimiter:``,managed:!1}}function cH(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 lH(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 uH(e){return e&&e.error&&e.error.message?e.error.message:``}var dH=z(`

          Tagging based on headers

          `),fH=z(`config`),pH=z(``),mH=z(`
          `),hH=z(`

          No tagging headers configured. Requests are not labelled.

          `),gH=z(``),_H=z(`
          `,1);function vH(e,t){D(t,!0);let n=A(M([])),r=A(!0),i=A(!1),a=A(!1),o=A(``);function s(){L(n).push(sH())}function c(e){let t=L(n)[e];!t||t.managed||L(n).splice(e,1)}async function l(){j(i,!0),j(o,``);try{let e=await Ts(`/admin/tagging/settings`,{label:`tagging settings`});if(e.stale)return;if(!e.ok){j(o,`Unable to load tagging settings.`);return}j(n,cH(e.data),!0),j(r,e.data&&e.data.editable!==!1,!0)}catch(e){console.error(`Failed to fetch tagging settings:`,e),j(o,`Unable to load tagging settings.`)}finally{j(i,!1)}}async function u(){if(!(L(a)||!L(r))){j(a,!0);try{let e=await Es(`/admin/tagging/settings`,`PUT`,lH(L(n)),{label:`tagging settings`});if(e.stale)return;if(!e.ok){Y.error(e.status!==401&&uH(e.data)||`Unable to save tagging settings.`);return}j(n,cH(e.data),!0),j(r,e.data&&e.data.editable!==!1,!0),j(o,``),Y.success(`Tagging settings saved.`)}catch(e){console.error(`Failed to save tagging settings:`,e),Y.error(`Unable to save tagging settings.`)}finally{j(a,!1)}}}kn(()=>{J.refreshTick,l()});var d=_H(),f=P(d),p=N(f);iC(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=>{B(e,dH())},$$slots:{title:!0}});var m=F(p,2),h=N(m);U(h,17,()=>L(n),ai,(e,t,n)=>{var i=mH(),a=N(i),o=N(a);G(o,`for`,`tagging-header-`+n);var s=F(o,2);ta(s),G(s,`id`,`tagging-header-`+n),E(a);var l=F(a,2),u=N(l);G(u,`for`,`tagging-prefix-`+n);var d=F(u,2);ta(d),G(d,`id`,`tagging-prefix-`+n),E(l);var f=F(l,2),p=N(f);G(p,`for`,`tagging-delimiter-`+n);var m=F(p,2);ta(m),G(m,`id`,`tagging-delimiter-`+n),E(f);var h=F(f,2),g=N(h);ta(g),He(2),E(h);var _=F(h,2),v=N(_),y=e=>{B(e,fH())},b=e=>{var i=pH();I(()=>{i.disabled=!L(r),G(i,`aria-label`,`Remove tagging header `+(L(t).header||n+1))}),R(`click`,i,()=>c(n)),B(e,i)};H(v,e=>{L(t).managed?e(y):e(b,-1)}),E(_),E(i),I(()=>{s.disabled=L(t).managed||!L(r),d.disabled=L(t).managed||!L(r),m.disabled=L(t).managed||!L(r),g.disabled=L(t).managed||!L(r)}),ua(s,()=>L(t).header,e=>L(t).header=e),ua(d,()=>L(t).prefix,e=>L(t).prefix=e),ua(m,()=>L(t).delimiter,e=>L(t).delimiter=e),da(g,()=>L(t).do_not_pass,e=>L(t).do_not_pass=e),B(e,i)});var g=F(h,2),_=e=>{NS(e,{size:16,label:`Loading tagging settings`})};H(g,e=>{L(i)&&e(_)});var v=F(g,2),y=e=>{B(e,hH())};H(v,e=>{!L(i)&&L(n).length===0&&e(y)}),E(m);var b=F(m,2),x=N(b);q(N(x),{get icon(){return mo},class:`form-action-icon`}),He(2),E(x);var S=F(x,2);q(N(S),{get icon(){return vo},class:`form-action-icon`}),He(2),E(S),E(b),E(f);var C=F(f,2),w=N(C),T=e=>{var t=gH(),n=N(t,!0);E(t),I(()=>V(n,L(o))),B(e,t)};H(w,e=>{L(o)&&e(T)}),E(C),I(()=>{x.disabled=!L(r)||L(a)||L(i),S.disabled=!L(r)||L(a)||L(i),G(S,`aria-busy`,L(a)?`true`:`false`)}),R(`click`,x,s),R(`click`,S,u),B(e,d),O()}Vr([`click`]);function yH(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 bH(e,t,n,r){return{...yH(e),user_path:String(t||``).trim(),selector:String(n||``).trim(),confirmation:r}}function xH(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 SH=z(`

          Usage Pricing Recalculation

          `),CH=z(`
          `);function wH(e,t){D(t,!0);let n=A(``),r=A(``),i=A(!1),a=k(()=>As.booleanFlag(`USAGE_PRICING_RECALCULATION_ENABLED`,!1));function o(){if(!L(a)){Y.error(`Usage pricing recalculation is unavailable.`);return}L(i)||Ys.open({title:`Recalculate Pricing`,titleId:`pricingRecalculateDialogTitle`,inputId:`pricing-recalculate-confirmation`,requiredText:`recalculate`,confirmLabel:`Recalculate Pricing`,icon:Ia,dialogClass:`pricing-recalculate-dialog`,message:`Stored usage cost fields matching the selected filters will be overwritten.`,onConfirm:()=>s()})}async function s(){if(!L(a)){Y.error(`Usage pricing recalculation is unavailable.`);return}if(!L(i)){j(i,!0);try{let e=await Es(`/admin/usage/recalculate-pricing`,`POST`,bH({selectedPreset:Uc.selectedPreset,customStartDate:Uc.customStartDate,customEndDate:Uc.customEndDate,today:ys.todayDate()},L(n),L(r),`recalculate`),{label:`pricing recalculation`});if(e.stale)return;if(!e.ok){Ys.error=`Unable to recalculate pricing.`;return}Ys.close(),Y.success(xH(e.data)),Yc.fetchUsage()}catch(e){console.error(`Failed to recalculate pricing:`,e),Ys.error=`Unable to recalculate pricing.`}finally{j(i,!1)}}}var c=Zr(),l=P(c),u=e=>{var t=CH(),s=N(t);iC(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=>{B(e,SH())},$$slots:{title:!0}});var c=F(s,2),l=N(c),u=F(N(l),2);fl(N(u),{}),E(u),E(l);var d=F(l,2),f=F(N(d),2);ta(f),E(d);var p=F(d,2),m=F(N(p),2);ta(m),E(p),E(c);var h=F(c,2),g=N(h);q(N(g),{get icon(){return Ia},class:`form-action-icon`}),He(2),E(g),E(h),E(t),I(()=>{g.disabled=L(i)||!L(a),G(g,`aria-busy`,L(i)?`true`:`false`)}),ua(f,()=>L(n),e=>j(n,e)),ua(m,()=>L(r),e=>j(r,e)),R(`click`,g,o),B(e,t)};H(l,e=>{L(a)&&e(u)}),B(e,c),O()}Vr([`click`]);function TH(e){return String(e&&e.status||`ok`).toLowerCase()}function EH(e){if(!e||typeof e!=`object`)return`Runtime refresh completed.`;let t=Number(e.model_count||0),n=Number(e.provider_count||0),r=TH(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 DH(e){return!!e&&TH(e)===`ok`}function OH(e){let t=e&&e.steps;return Array.isArray(t)?t:[]}function kH(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=z(`

          Runtime Refresh

          `),jH=z(`
        • `),MH=z(`
            `),NH=z(`
            `,1);function PH(e,t){D(t,!0);let n=A(!1),r=A(null);async function i(){if(!L(n)){j(n,!0),j(r,null);try{let e=await Es(`/admin/runtime/refresh`,`POST`,void 0,{label:`runtime refresh`});if(e.stale)return;if(!e.ok){Y.error(`Runtime refresh failed.`);return}j(r,e.data&&typeof e.data==`object`?e.data:null,!0),DH(L(r))?Y.success(EH(L(r))):Y.error(EH(L(r))),J.refresh()}catch(e){console.error(`Failed to refresh runtime:`,e),Y.error(`Runtime refresh failed.`)}finally{j(n,!1)}}}var a=NH(),o=P(a),s=N(o);iC(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=>{B(e,AH())},$$slots:{title:!0}});var c=F(s,2),l=N(c);let u;q(N(l),{get icon(){return go},class:`settings-refresh-icon`}),He(2),E(l),E(c),E(o);var d=F(o,2),f=N(d),p=e=>{var t=MH();U(t,21,()=>OH(L(r)),e=>e.name,(e,t)=>{var n=jH(),r=N(n,!0);E(n),I(e=>{W(n,1,`runtime-refresh-step is-${L(t).status??``}`,`svelte-yeq2mp`),V(r,e)},[()=>kH(L(t))]),B(e,n)}),E(t),B(e,t)},m=k(()=>OH(L(r)).length>0);H(f,e=>{L(m)&&e(p)}),E(d),I(()=>{u=W(l,1,`btn btn-primary btn-with-icon settings-refresh-btn`,null,u,{"is-refreshing":L(n)}),l.disabled=L(n),G(l,`aria-busy`,L(n)?`true`:`false`)}),R(`click`,l,i),B(e,a),O()}Vr([`click`]);var FH=z(``),IH=z(`

            `),LH=z(`

            `),RH=z(``),zH=z(`
            `),BH=z(`

            AI Processing

            `);function VH(e,t){D(t,!0);let n=A(M([])),r=A(!1),i=A(``),a=A(``);async function o(){j(r,!0),j(a,``);try{let e=await Ts(`/admin/runtime/settings`,{label:`runtime settings`});if(e.stale)return;if(!e.ok){j(a,`Unable to load runtime settings.`);return}j(n,Array.isArray(e.data?.settings)?e.data.settings:[],!0)}catch(e){console.error(`Failed to load runtime settings:`,e),j(a,`Unable to load runtime settings.`)}finally{j(r,!1)}}async function s(e,t,r){if(!(e.locked||L(i))){j(i,e.key,!0);try{let i=await Es(`/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,Y.error(`Unable to save ${e.label}.`);return}j(n,L(n).map(t=>t.key===e.key?i.data:t),!0),Y.success(`${e.label} saved.`)}catch(t){r.value=e.value,console.error(`Failed to save runtime setting:`,t),Y.error(`Unable to save ${e.label}.`)}finally{j(i,``)}}}kn(()=>{J.refreshTick,o()});var c=Zr(),l=P(c),u=e=>{var t=BH(),o=N(t),c=F(N(o),2),l=e=>{var t=FH(),n=N(t,!0);E(t),I(()=>V(n,L(a))),B(e,t)};H(c,e=>{L(a)&&e(l)}),E(o);var u=F(o,2);U(u,21,()=>L(n),e=>e.key,(e,t)=>{var n=zH(),r=N(n),a=N(r),o=N(a,!0);E(a);var c=F(a,2),l=e=>{var n=IH(),r=N(n,!0);E(n),I(()=>V(r,L(t).description)),B(e,n)};H(c,e=>{L(t).description&&e(l)});var u=F(c,2),d=e=>{var n=LH(),r=N(n);E(n),I(()=>V(r,`Managed by ${(L(t).managed_by||`environment`)??``}`)),B(e,n)};H(u,e=>{L(t).locked&&e(d)}),E(r);var f=F(r,2);U(f,21,()=>L(t).options||[],e=>e.value,(e,t)=>{var n=RH(),r=N(n,!0);E(n);var i={};I(()=>{G(n,`title`,L(t).description||``),V(r,L(t).label),i!==(i=L(t).value)&&(n.value=(n.__value=L(t).value)??``)}),B(e,n)}),E(f);var p;Ui(f),E(n),I(()=>{G(a,`for`,`runtime-setting-${L(t).key}`),V(o,L(t).label),G(f,`id`,`runtime-setting-${L(t).key}`),f.disabled=L(t).locked||L(i)!==``,p!==(p=L(t).value)&&(f.value=(f.__value=L(t).value)??``,Hi(f,L(t).value))}),R(`change`,f,e=>s(L(t),e.currentTarget.value,e.currentTarget)),B(e,n)}),E(u),E(t),I(()=>G(u,`aria-busy`,L(r)?`true`:`false`)),B(e,t)};H(l,e=>{(L(n).length>0||L(a))&&e(u)}),B(e,c),O()}Vr([`change`]);var HH=z(`
            `);function UH(e,t){D(t,!0),kn(()=>{J.refreshTick,Xo.page===`settings`&&(ys.ensureOptions(),As.ensureLoaded())});var n=HH(),r=F(N(n),2),i=N(r);GV(i,{});var a=F(i,2);JV(a,{});var o=F(a,2);iH(o,{});var s=F(o,2);oH(s,{});var c=F(s,2);vH(c,{});var l=F(c,2);VH(l,{});var u=F(l,2);wH(u,{}),PH(F(u,2),{}),E(r);var d=F(r,2),f=N(d,!0);E(d),E(n),I(e=>V(f,e),[()=>Go()]),B(e,n),O()}var WH=z(`
            `),GH=z(`
             
            `),KH=z(`
             
            `),qH=z(`
             
            `),JH=z(`
            `),YH=z(`
            `,1),XH=z(`
            `);function ZH(e,t){D(t,!0);let n=K(t,`showPromptCache`,3,!0),r=kM({logPrefix:`Failed to copy interaction message:`}),i=k(()=>t.msg.role===`function_call`||t.msg.role===`function_result`);function a(e){return(Math.max(0,Math.min(1,Number(e||0)))*100).toFixed(1)+`%`}function o(e){let t=Math.max(0,Math.min(1,Number(e||0)));return t>0?Math.round(t*100)+`% of this visible prompt item is estimated provider-cached`:void 0}function s(e){return e.role===`function_call`?(e.toolCalls||[]).map(e=>e.name+`()`).join(`, `):(e.functionName?e.functionName+`: `:``)+e.text}var c=XH();let l;var u=N(c),d=e=>{var r=GH(),i=N(r),a=N(i),c=N(a,!0);E(a);var l=F(a,2),u=N(l,!0);E(l);var d=F(l,2),f=N(d,!0);E(d),E(i);var p=F(i,2),m=e=>{var n=WH(),r=N(n);E(n),I(()=>V(r,`Call ID: ${t.msg.functionCallID??``}`)),B(e,n)};H(p,e=>{t.msg.functionCallID&&e(m)});var h=F(p,2),g=e=>{var n=Zr();U(P(n),17,()=>t.msg.toolCalls,ai,(e,n)=>{var r=Zr(),i=P(r),a=e=>{var r=WH(),i=N(r);E(r),I(()=>V(i,`Call ID${t.msg.toolCalls.length>1?` (`+L(n).name+`)`:``}: ${L(n).id??``}`)),B(e,r)};H(i,e=>{L(n).id&&e(a)}),B(e,r)}),B(e,n)};H(h,e=>{t.msg.role===`function_call`&&t.msg.toolCalls&&e(g)});var _=F(h,2),v=N(_,!0);E(_),E(r),I((e,n,i,a)=>{G(r,`title`,e),V(c,t.msg.roleLabel),V(u,n),V(f,i),V(v,a)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>s(t.msg),()=>ys.formatTimestamp(t.msg.timestamp),()=>lL(t.msg)]),B(e,r)},f=e=>{var r=YH(),i=P(r),a=N(i),s=N(a,!0);E(a);var c=F(a,2),l=N(c,!0);E(c),E(i);var u=F(i,2),d=e=>{var r=KH(),i=N(r,!0);E(r),I(e=>{G(r,`title`,e),V(i,t.msg.text)},[()=>n()?o(t.msg.promptCacheRatio):void 0]),B(e,r)};H(u,e=>{t.msg.text&&e(d)});var f=F(u,2),p=e=>{var n=JH();U(n,23,()=>t.msg.toolCalls,(e,t)=>e.name+`-`+t,(e,t)=>{var n=qH(),r=N(n),i=N(r),a=N(i,!0);E(i);var o=F(i,2),s=N(o,!0);E(o),E(r);var c=F(r,2),l=e=>{var n=WH(),r=N(n);E(n),I(()=>V(r,`Call ID: ${L(t).id??``}`)),B(e,n)};H(c,e=>{L(t).id&&e(l)});var u=F(c,2),d=N(u,!0);E(u),E(n),I((e,n)=>{V(a,L(t).name+`()`),V(s,e),V(d,n)},[()=>dL(L(t))||`No arguments`,()=>dL(L(t))||`No arguments`]),B(e,n)}),E(n),B(e,n)};H(f,e=>{t.msg.toolCalls&&e(p)}),I((e,n)=>{G(i,`title`,e),V(s,t.msg.roleLabel),V(l,n)},[()=>n()?o(t.msg.promptCacheRatio):void 0,()=>ys.formatTimestamp(t.msg.timestamp)]),B(e,r)};H(u,e=>{L(i)?e(d):e(f,-1)});var p=F(u,2);let m;var h=N(p);{let e=k(()=>r.copied?Ka:Ya);q(h,{get icon(){return L(e)},width:`14`,height:`14`})}E(p),E(c),I(e=>{W(c,1,Pi([L(i)?`chat-function-note`:`chat-message`,t.msg.roleClass,{"is-anchor":t.msg.isAnchor,"is-after-anchor":t.msg.isAfterAnchor}]),`svelte-12s99s5`),G(c,`data-conversation-anchor`,t.msg.isAnchor?`true`:void 0),G(c,`data-entry-id`,t.msg.entryID),l=Vi(c,``,l,e),m=W(p,1,`chat-message-copy svelte-12s99s5`,null,m,{"is-copied":r.copied}),G(p,`aria-label`,r.copied?`Message copied`:`Copy message`),G(p,`title`,r.copied?`Copied`:`Copy message`)},[()=>({"--prompt-cache-fill":a(t.msg.promptCacheRatio),"--prompt-cache-visibility":n()&&t.msg.promptCacheRatio>0?`1`:`0`})]),R(`click`,p,e=>{e.stopPropagation(),r.copy(uL(t.msg))}),B(e,c),O()}Vr([`click`]);function QH(e,t=0){let n=Math.max(0,nU(e)-Math.max(0,nU(t))),r=Math.min(320,Math.max(180,Math.floor(n*.58))),i=Math.min(360,Math.max(128,Math.floor(n*.35)));return{min:r,max:Math.max(r,n-i)}}function $H(e,t,n=0){let r=QH(t,n),i=nU(e)||520;return Math.min(r.max,Math.max(r.min,Math.round(i)))}function eU(e,t,n=0){return $H(nU(t)-nU(e),t,n)}function tU(e,t,n,r){if(!Array.isArray(e)||e.length===0)return{index:-1,align:`start`};let i=nU(t),a=0;e.forEach((e,t)=>{nU(e)<=i+1&&(a=t)});let o=Number(r)<0?-1:1,s=Math.min(e.length-1,Math.max(0,a+o)),c=e.length-1,l=nU(e[c])0&&s===c&&l?`end`:`start`}}function nU(e){let t=Number(e);return Number.isFinite(t)?t:0}var rU=z(`
            `),iU=z(`
            `),aU=z(`

            Loading interactions...

            `),oU=z(`

            No interaction data available for this entry.

            `),sU=z(``),cU=z(`
            `,1),lU=z(`

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

            `),uU=z(`
            `),dU=z(``),fU=z(``),pU=z(``);function mU(e,t){D(t,!0);let n=yL,r=Number(Ca(`gomodel_interactions_panel_width`)),i=`gomodel_interactions_prompt_cache_fill`,a=Number.isFinite(r)&&r>0?r:520,o=A(M(a)),s=A(320),c=A(760),l=A(!1),u=A(!1),d=A(Ca(i,`true`)!==`false`),f=null;function p(e,{fullscreen:t,revealWithoutSlide:n=!1}){let r=yP(180);return t?ic(e,{x:L(o),duration:r,easing:sc}):n?{duration:0}:ac(e,{axis:`x`,duration:r,easing:sc})}async function m(e){if(e===L(l))return;let t=L(l)&&!e;j(u,t,!0),j(l,e,!0),t&&(await Sr(),j(u,!1))}function h(){j(d,!L(d)),wa(i,L(d))}function g(){return(document.querySelector(`.sidebar`)?.getBoundingClientRect().width||0)+(document.querySelector(`.sidebar-toggle`)?.getBoundingClientRect().width||0)}function _(){let e=g(),t=QH(window.innerWidth,e);j(s,t.min,!0),j(c,t.max,!0),j(o,$H(a,window.innerWidth,e),!0)}function v(e){j(o,eU(e,window.innerWidth,g()),!0),a=L(o)}function y(e){e.button===0&&(e.preventDefault(),f=e.pointerId,e.currentTarget.setPointerCapture(e.pointerId),document.body.classList.add(`conversation-panel-resizing`),v(e.clientX))}function b(e){e.pointerId===f&&v(e.clientX)}function x(e){f===null||e.pointerId!==void 0&&e.pointerId!==f||(f=null,document.body.classList.remove(`conversation-panel-resizing`),wa(`gomodel_interactions_panel_width`,a))}function S(e){e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||(e.preventDefault(),a=L(o)+(e.key===`ArrowLeft`?24:-24),_(),a=L(o),wa(`gomodel_interactions_panel_width`,a))}function C(e){let t=document.getElementById(`interactions-drawer-content`),r=n.conversationThreadEl;if(!t||!r)return;let i=[...r.querySelectorAll(`[data-conversation-message="true"]`)],a=t.getBoundingClientRect(),o=a.top+14,s=tU(i.map(e=>e.getBoundingClientRect().top),o,a.bottom,e),c=i[s.index];if(!c)return;let l=s.align===`end`?t.scrollHeight:t.scrollTop+c.getBoundingClientRect().top-a.top-14;t.scrollTo({top:l,behavior:yP(1)>0?`smooth`:`auto`})}function w(){return[document.querySelector(`.sidebar`),document.querySelector(`.sidebar-toggle`),document.getElementById(`dashboard-content`)].filter(Boolean)}kn(()=>{if(!n.conversationOpen)return;_();let e=document.querySelector(`.sidebar`),t=new ResizeObserver(_);e&&t.observe(e);let r=e=>{e.key===`Escape`&&!ka.anyOpen&&(L(l)?m(!1):n.closeConversation())};return window.addEventListener(`keydown`,r),window.addEventListener(`resize`,_),()=>{x({}),t.disconnect(),window.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,_)}}),kn(()=>{n.conversationOpen||j(l,!1)}),kn(()=>{if(!L(l))return;let e=w().map(e=>({element:e,inert:e.inert,ariaHidden:e.getAttribute(`aria-hidden`)}));return e.forEach(({element:e})=>{e.inert=!0,e.setAttribute(`aria-hidden`,`true`)}),()=>{e.forEach(({element:e,inert:t,ariaHidden:n})=>{e.inert=t,n===null?e.removeAttribute(`aria-hidden`):e.setAttribute(`aria-hidden`,n)})}}),kn(()=>{Xo.page!==`audit-logs`&&n.conversationOpen&&n.closeConversation()});var T=Zr(),ee=P(T),te=e=>{var t=Zr();U(P(t),16,()=>[L(l)],e=>e,(e,t)=>{var r=pU();let i,a;var l=N(r),f=F(l,2),g=N(f),_=F(N(g),2),v=N(_);let w;E(_),E(g);var T=F(g,2),ee=N(T),te=N(ee);{let e=k(()=>t?co:so);q(te,{get icon(){return L(e)},class:`table-icon-svg`})}E(ee),zs(F(ee,2),{label:`Close interactions`,onclick:()=>n.closeConversation(),get el(){return n.conversationCloseBtnEl},set el(e){n.conversationCloseBtnEl=e}}),E(T),E(f);var ne=F(f,2),re=N(ne),ie=e=>{var t=rU(),n=N(t);q(N(n),{get icon(){return Pa},width:`14`,height:`14`}),E(n);var r=F(n,2);q(N(r),{get icon(){return ja},width:`14`,height:`14`}),E(r),E(t),R(`click`,n,()=>C(-1)),R(`click`,r,()=>C(1)),B(e,t)};H(re,e=>{n.conversationMessages.length>1&&e(ie)});var ae=F(re,2),oe=e=>{var t=iU(),r=N(t,!0);E(t),I(()=>V(r,n.conversationError)),B(e,t)};H(ae,e=>{n.conversationError&&e(oe)});var se=F(ae,2),ce=e=>{B(e,aU())};H(se,e=>{n.conversationLoading&&e(ce)});var le=F(se,2),ue=e=>{B(e,oU())},de=k(()=>!n.conversationLoading&&!n.followUpSending&&!n.conversationError&&n.conversationMessages.length===0&&!n.conversationLiveWaiting());H(le,e=>{L(de)&&e(ue)});var fe=F(le,2),pe=e=>{var t=cU(),r=P(t),i=e=>{var t=sU(),n=N(t);let r;He(2),E(t),I(()=>{G(t,`aria-checked`,L(d)),G(t,`title`,(L(d)?`Hide`:`Show`)+` estimated provider prompt-cache fill`),r=W(n,1,`conversation-cache-switch svelte-ssrzja`,null,r,{"is-active":L(d)})}),R(`click`,t,h),B(e,t)},a=k(()=>n.conversationMessages.some(e=>Number(e.promptCacheRatio||0)>0));H(r,e=>{L(a)&&e(i)});var o=F(r,2);U(o,21,()=>n.conversationMessages,e=>e.uid,(e,t)=>{ZH(e,{get msg(){return L(t)},get showPromptCache(){return L(d)}})}),E(o),ha(o,e=>n.conversationThreadEl=e,()=>n?.conversationThreadEl),B(e,t)};H(fe,e=>{n.conversationMessages.length>0&&e(pe)});var me=F(fe,2),he=e=>{B(e,lU())};H(me,e=>{n.conversationTruncated&&e(he)});var ge=F(me,2),_e=e=>{var t=uU(),r=F(N(t),2),i=N(r,!0);E(r),E(t),I(e=>V(i,e),[()=>n.conversationLiveStatusText()]),B(e,t)},ve=k(()=>n.conversationLiveWaiting());H(ge,e=>{L(ve)&&e(_e)}),E(ne);var ye=F(ne,2),be=e=>{var t=fU(),r=N(t),i=N(r);dt(i);var a=F(i,2),o=e=>{var t=dU(),r=N(t,!0);E(t),I(()=>V(r,n.followUpError)),B(e,t)};H(a,e=>{n.followUpError&&e(o)});var s=F(a,2),c=N(s),l=N(c,!0);E(c);var u=F(c,2),d=N(u,!0);E(u),E(s),E(r),E(t),I((e,t,r)=>{i.disabled=e,V(l,t),u.disabled=r,V(d,n.followUpSending?`Sending…`:`Send`)},[()=>n.followUpSending||n.conversationLiveWaiting(),()=>n.selectedConversationEntry()?.path||``,()=>!n.canSendFollowUp()]),Br(`submit`,r,e=>{e.preventDefault(),n.sendFollowUp()}),ua(i,()=>n.followUpText,e=>n.followUpText=e),B(e,t)},xe=k(()=>n.conversationAnchorID&&n.followUpKind());H(ye,e=>{L(xe)&&e(be)}),E(r),ha(r,e=>n.conversationDialogEl=e,()=>n?.conversationDialogEl),I(()=>{i=W(r,1,`conversation-drawer svelte-ssrzja`,null,i,{"conversation-drawer-fullscreen":t}),G(r,`role`,t?`dialog`:void 0),G(r,`aria-modal`,t?`true`:void 0),a=Vi(r,``,a,{"--conversation-panel-width":L(o)+`px`}),G(l,`aria-valuemin`,L(s)),G(l,`aria-valuemax`,L(c)),G(l,`aria-valuenow`,L(o)),G(_,`aria-label`,n.conversationFollowLatest?`Following the latest interaction`:`Viewing a historical interaction`),G(_,`title`,n.conversationFollowLatest?`Following the latest interaction as new events arrive`:`Viewing a historical interaction; live updates are not followed`),w=W(v,1,`live-dot`,null,w,{"is-streaming":n.conversationFollowLatest}),G(ee,`aria-label`,t?`Exit fullscreen interactions`:`Show interactions fullscreen`),G(ee,`title`,t?`Exit fullscreen`:`Fullscreen`),G(ee,`aria-pressed`,t)}),R(`pointerdown`,l,y),R(`pointermove`,l,b),R(`pointerup`,l,x),Br(`pointercancel`,l,x),Br(`lostpointercapture`,l,x),R(`keydown`,l,S),R(`click`,ee,()=>m(!t)),Oi(7,r,()=>p,()=>({fullscreen:t,revealWithoutSlide:!t&&L(u)})),B(e,r)}),B(e,t)};H(ee,e=>{n.conversationOpen&&e(te)}),B(e,T),O()}Vr([`pointerdown`,`pointermove`,`pointerup`,`keydown`,`click`]);var hU=z(`
            `,1);function gU(e,t){D(t,!0);let n={overview:OC,usage:wT,budgets:eD,"rate-limits":dO,models:qj,workflows:mP,"audit-logs":uR,guardrails:rz,"mcp-servers":Lz,"providers-config":KB,"auth-keys":BV,settings:UH};ys.init(),Uc.init(),J.init(),Da.init(),Oa.init(),Xo.init(),kn(()=>{J.refreshTick,As.fetch(),Wc.fetchModels(),Wc.fetchCategories()}),kn(()=>{document.body.classList.toggle(`dashboard-modal-open`,ka.anyOpen)});let r=k(()=>n[Xo.page]||OC);var i=hU(),a=P(i);Ls(a,{});var o=F(a,2);let s;var c=N(o);mc(c,{}),gi(F(c,2),()=>L(r),(e,t)=>{t(e,{})}),E(o);var l=F(o,2);mU(l,{});var u=F(l,2);qs(u,{});var d=F(u,2);$s(d,{}),fc(F(d,2),{}),I(()=>s=W(o,1,`content`,null,s,{"interactions-open":yL.conversationOpen})),B(e,i),O()}ei(gU,{target:document.getElementById(`app`)}); \ No newline at end of file diff --git a/internal/admin/dashboard/static/dist/assets/index-_N2yDOD9.css b/internal/admin/dashboard/static/dist/assets/index-_N2yDOD9.css deleted file mode 100644 index ff91f95f6..000000000 --- a/internal/admin/dashboard/static/dist/assets/index-_N2yDOD9.css +++ /dev/null @@ -1 +0,0 @@ -: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{height:100vh;min-height:0;display:flex;overflow:hidden}.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{-webkit-overflow-scrolling:touch;flex:1 1 0;width:100%;min-width:0;min-height:0;padding:32px;transition:width .2s;overflow-y:auto;container:dashboard-content/inline-size}.content>*{width:100%;max-width:1336px;margin-inline:auto}body.dashboard-modal-open .content{overflow-y:hidden}.content.interactions-open>*{max-width:none}.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)}#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}.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:hidden auto}.sidebar.sidebar-resizing.svelte-1nwtzae{transition:none}.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}.nav-label.svelte-1nwtzae{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.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:ew-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.svelte-1nwtzae:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 36%, transparent);outline-offset:2px}body.sidebar-resizing{cursor:ew-resize;-webkit-user-select:none;user-select:none}.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-label:where(.svelte-1nwtzae){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) .nav-label:where(.svelte-1nwtzae){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-has-interactions.svelte-17mysgz{padding-right:44px}.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;flex-shrink:0;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:0;border-left:1px solid var(--border);background:color-mix(in srgb, var(--accent) 12%, var(--bg));width:32px;height:100%;color:var(--accent);cursor:pointer;border-radius:0;justify-content:center;align-items:center;margin:0;transition:background .1s ease-out,color .1s ease-out;display:inline-flex;position:absolute;inset:0 0 0 auto}.audit-conversation-trigger.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 20%, var(--bg))}.audit-conversation-trigger-active.svelte-17mysgz{color:var(--accent-strong,var(--accent));background:color-mix(in srgb, var(--accent) 28%, var(--bg));border-left:0}.audit-conversation-trigger-active.svelte-17mysgz:hover{background:color-mix(in srgb, var(--accent) 34%, var(--bg))}.audit-conversation-trigger.svelte-17mysgz .audit-conversation-trigger-svg{stroke-linecap:butt;stroke-linejoin:miter;width:18px;height:18px}.audit-path.svelte-17mysgz{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.audit-request-badge.svelte-17mysgz{white-space:nowrap;gap:6px;min-width:0}.audit-timestamp-time.svelte-17mysgz{display:none}.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}@container dashboard-content (width<=699px){.audit-entry-summary.svelte-17mysgz{flex-direction:column;align-items:flex-start}.audit-entry-right.svelte-17mysgz{justify-content:space-between;width:100%}.audit-request-status.svelte-17mysgz,.audit-timestamp-full.svelte-17mysgz{display:none}.audit-timestamp-time.svelte-17mysgz{display:inline}}.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)}@container dashboard-content (width<=699px){.audit-pane-split.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-width:2px;border-color:color-mix(in srgb, var(--prompt-cache-color) 38%, var(--border))}.audit-entry-details.svelte-cmjgwr{border-top:1px solid var(--border);background:var(--bg-surface);padding:12px;overflow:hidden}.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}.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}.chat-message.svelte-12s99s5{border:1px solid var(--border);background:var(--bg);border-radius:10px;max-width:94%;padding:10px 42px 10px 12px;position:relative;overflow:hidden}.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-message.svelte-12s99s5:before,.chat-function-note.svelte-12s99s5:before{content:"";z-index:0;pointer-events:none;opacity:var(--prompt-cache-visibility);background:linear-gradient(90deg, color-mix(in srgb, var(--prompt-cache-color) 18%, transparent) 0, color-mix(in srgb, var(--prompt-cache-color) 18%, transparent) var(--prompt-cache-fill), transparent var(--prompt-cache-fill), transparent 100%);transition:opacity .15s;position:absolute;inset:0}.chat-message.svelte-12s99s5>:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5>:where(.svelte-12s99s5){z-index:1;position:relative}.chat-message-copy.svelte-12s99s5{z-index:2;border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 92%, transparent);width:26px;height:26px;color:var(--text-muted);opacity:0;pointer-events:none;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:opacity .12s,transform .12s,color .12s,background-color .12s,border-color .12s;display:inline-flex;position:absolute;bottom:6px;right:6px;transform:translateY(3px)}.chat-message.svelte-12s99s5:hover .chat-message-copy:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5:hover .chat-message-copy:where(.svelte-12s99s5),.chat-message.svelte-12s99s5:focus-within .chat-message-copy:where(.svelte-12s99s5),.chat-function-note.svelte-12s99s5:focus-within .chat-message-copy:where(.svelte-12s99s5),.chat-message-copy.is-copied.svelte-12s99s5{opacity:1;pointer-events:auto;transform:translateY(0)}.chat-message-copy.svelte-12s99s5:hover{color:var(--text);background:var(--bg-surface-hover)}.chat-message-copy.svelte-12s99s5:focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:1px}.chat-message-copy.is-copied.svelte-12s99s5{color:var(--success);border-color:color-mix(in srgb, var(--success) 45%, var(--border))}.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);border-radius:5px;min-width:0;padding:3px 5px;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;position:relative;overflow:hidden}.chat-tool-call-summary.svelte-12s99s5{cursor:pointer;align-items:baseline;gap:6px;min-width:0;display:flex}.chat-tool-call-preview.svelte-12s99s5{white-space:nowrap;text-overflow:ellipsis;opacity:.8;flex:1;min-width:0;overflow:hidden}.chat-tool-call-arguments.svelte-12s99s5{background:color-mix(in srgb, var(--border) 45%, transparent);color:var(--text);font:inherit;white-space:pre-wrap;overflow-wrap:anywhere;border-radius:6px;max-height:200px;margin-top:5px;padding:6px 8px;line-height:1.45;overflow:auto}.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 42px 4px 12px;font-size:12px;position:relative;overflow:hidden}.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;min-height:26px;display:flex;overflow:hidden}.chat-function-note-inner.svelte-12s99s5 .chat-time:where(.svelte-12s99s5){flex-shrink:0;margin-left:auto}.chat-function-call-id.svelte-12s99s5{color:var(--text-muted);overflow-wrap:anywhere;margin-top:6px;font-size:10px}.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-label.svelte-12s99s5:before{content:"▸";margin-right:4px;transition:transform .12s;display:inline-block}.chat-function-note-details[open].svelte-12s99s5 .chat-function-label:where(.svelte-12s99s5):before{transform:rotate(90deg)}.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%}}@media (hover:none){.chat-message-copy.svelte-12s99s5{opacity:1;pointer-events:auto;transform:none}}@media (prefers-reduced-motion:reduce){.chat-message-copy.svelte-12s99s5{transition:none}}.conversation-drawer.svelte-ssrzja{width:var(--conversation-panel-width);background:var(--bg-surface);border-left:1px solid var(--border);z-index:12;flex-direction:column;flex:none;min-width:0;height:100vh;display:flex;position:sticky;top:0}.conversation-drawer-fullscreen.svelte-ssrzja{z-index:70;border-left:0;flex-basis:auto;width:100vw;height:100dvh;position:fixed;inset:0}.conversation-drawer-fullscreen.svelte-ssrzja .conversation-resize-handle:where(.svelte-ssrzja){display:none}.conversation-resize-handle.svelte-ssrzja{z-index:2;cursor:col-resize;touch-action:none;background:0 0;border:0;border-radius:0;outline:none;width:10px;padding:0;position:absolute;top:0;bottom:0;left:-5px}.conversation-resize-handle.svelte-ssrzja:after{content:"";background:0 0;width:2px;transition:background .15s;position:absolute;top:0;bottom:0;left:4px}.conversation-resize-handle.svelte-ssrzja:hover:after,.conversation-resize-handle.svelte-ssrzja:focus-visible:after{background:color-mix(in srgb, var(--accent) 70%, var(--border))}body.conversation-panel-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.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-actions.svelte-ssrzja{align-items:center;gap:6px;display:flex}.conversation-drawer-title.svelte-ssrzja{align-items:center;gap:9px;min-width:0;display:flex}.conversation-follow-status.svelte-ssrzja{justify-content:center;align-items:center;margin:-4px;padding:4px;display:inline-flex}.conversation-drawer-header.svelte-ssrzja h3{font-size:16px;font-weight:700}#interactions-drawer-content.svelte-ssrzja{position:relative}.conversation-message-navigation.svelte-ssrzja{z-index:4;opacity:0;pointer-events:none;flex-direction:column;gap:4px;width:max-content;height:0;margin-left:auto;margin-right:12px;transition:opacity .12s,transform .12s;display:flex;position:sticky;top:12px;transform:translateY(-3px)}#interactions-drawer-content.svelte-ssrzja:hover .conversation-message-navigation:where(.svelte-ssrzja),.conversation-message-navigation.svelte-ssrzja:focus-within{opacity:1;pointer-events:auto;transform:translateY(0)}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja){border:1px solid var(--border);background:color-mix(in srgb, var(--bg-surface) 94%, transparent);width:30px;height:30px;min-height:30px;color:var(--text-muted);border-radius:6px;justify-content:center;align-items:center;padding:0;display:inline-flex;box-shadow:0 1px 3px #00000029}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja):hover{color:var(--text);background:var(--bg-surface-hover)}.conversation-message-navigation.svelte-ssrzja button:where(.svelte-ssrzja):focus-visible{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:1px}.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 textarea:where(.svelte-ssrzja){resize:vertical;border:1px solid var(--border);background:var(--bg);width:100%;min-height:50px;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-cache-legend.svelte-ssrzja{color:var(--text-muted);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:7px;margin:12px 16px 0;padding:0;font-family:inherit;font-size:11px;display:flex}.conversation-cache-legend.svelte-ssrzja:hover{color:var(--text)}.conversation-cache-legend.svelte-ssrzja:focus-visible{outline:2px solid color-mix(in srgb, var(--prompt-cache-color) 35%, transparent);outline-offset:3px;border-radius:3px}.conversation-cache-switch.svelte-ssrzja{background:color-mix(in srgb, var(--text-muted) 30%, var(--border));border-radius:999px;flex:none;width:28px;height:16px;transition:background-color .15s;position:relative}.conversation-cache-switch.is-active.svelte-ssrzja{background:color-mix(in srgb, var(--prompt-cache-color) 80%, var(--bg))}.conversation-cache-switch-thumb.svelte-ssrzja{background:#fff;border-radius:50%;width:12px;height:12px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #0000003d}.conversation-cache-switch.is-active.svelte-ssrzja .conversation-cache-switch-thumb:where(.svelte-ssrzja){transform:translate(12px)}.conversation-cache-estimate.svelte-ssrzja{opacity:.75}.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}@media (hover:none){.conversation-message-navigation.svelte-ssrzja{opacity:1;pointer-events:auto;transform:none}}@media (prefers-reduced-motion:reduce){.conversation-message-navigation.svelte-ssrzja{transition:none}} diff --git a/internal/admin/dashboard/static/dist/index.html b/internal/admin/dashboard/static/dist/index.html index 857612a60..8c8786eb5 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/app/app.go b/internal/app/app.go index 608c611fc..180e785d1 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -9,6 +9,7 @@ import ( "log/slog" "net" "net/http" + "reflect" "strings" "sync" "time" @@ -74,6 +75,7 @@ type App struct { server *server.Server storage storage.Storage runtimeSettings *runtimesettings.Service + extensionAuth bool // registered records every successfully initialized subsystem in // construction order, together with the teardown path that owns it. It is @@ -119,6 +121,7 @@ func applyExtensions(serverCfg *server.Config, extensions *ext.Registry) { serverCfg.ExtraMiddleware = extensions.Middleware() serverCfg.ExtraRoutes = extensions.Routes() serverCfg.ExtraAuthSkipPaths = extensions.PublicPaths() + serverCfg.RequestAuthenticators = extensions.Authenticators() } // routeSelectorHooks adapts upstream client lifecycle events into route @@ -216,7 +219,8 @@ func New(ctx context.Context, cfg Config) (*App, error) { } app := &App{ - config: appCfg, + config: appCfg, + extensionAuth: hasUsableRequestAuthenticator(cfg.Extensions), } app.live = live.NewBroker(live.Config{ Enabled: appCfg.Admin.LiveLogsEnabled, @@ -775,6 +779,12 @@ func New(ctx context.Context, cfg Config) (*App, error) { } app.server = server.New(provider, serverCfg) + // Registries are reused across reload generations, so their authenticators + // are shared too. Rebind only after every fallible construction step has + // succeeded: otherwise a failed replacement would leave the still-serving + // generation pointing at the replacement's already-closed audit logger. + bindAuthenticationEventRecorders(cfg.Extensions, auditlog.NewAuthenticationEventRecorder(auditResult.Logger)) + return app, nil } @@ -979,6 +989,12 @@ func (a *App) logStartupInfo() { // Security warnings managedKeysConfigured := a.authKeys != nil && a.authKeys.Service != nil && a.authKeys.Service.Enabled() switch { + case a.extensionAuth && cfg.Server.MasterKey != "" && managedKeysConfigured: + slog.Info("authentication enabled", "mode", "master_key+managed_keys+extension") + case a.extensionAuth && (cfg.Server.MasterKey != "" || managedKeysConfigured): + slog.Info("authentication enabled", "mode", "extension+bearer") + case a.extensionAuth: + slog.Info("authentication enabled", "mode", "extension") case cfg.Server.MasterKey != "" && managedKeysConfigured: slog.Info("authentication enabled", "mode", "master_key+managed_keys", "managed_key_total", a.authKeys.Service.Total(), "managed_key_active", a.authKeys.Service.ActiveCount()) case managedKeysConfigured: @@ -1030,6 +1046,45 @@ func (a *App) logStartupInfo() { } +func hasUsableRequestAuthenticator(registry *ext.Registry) bool { + if registry == nil { + return false + } + for _, authenticator := range registry.Authenticators() { + if !nilInterface(authenticator) { + return true + } + } + return false +} + +func bindAuthenticationEventRecorders(registry *ext.Registry, recorder ext.AuthenticationEventRecorder) { + if registry == nil || recorder == nil { + return + } + for _, authenticator := range registry.Authenticators() { + if nilInterface(authenticator) { + continue + } + if aware, ok := authenticator.(ext.AuthenticationEventRecorderAware); ok && !nilInterface(aware) { + aware.SetAuthenticationEventRecorder(recorder) + } + } +} + +func nilInterface(value any) bool { + if value == nil { + return true + } + reflected := reflect.ValueOf(value) + switch reflected.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice: + return reflected.IsNil() + default: + return false + } +} + // initAdmin creates the admin API handler and optionally the dashboard handler. // Returns nil dashboard handler if uiEnabled is false. func initAdmin( diff --git a/internal/app/app_test.go b/internal/app/app_test.go index b944b8194..25b96119a 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -1,11 +1,14 @@ package app import ( + "bytes" "context" "errors" "io" + "log/slog" "net/http" "net/http/httptest" + "strings" "testing" "time" @@ -697,6 +700,7 @@ func TestApplyExtensionsSnapshotsRegistryIntoServerConfig(t *testing.T) { reg.UseMiddleware(func(next echo.HandlerFunc) echo.HandlerFunc { return next }) reg.RegisterRoutes(func(_ *echo.Echo) {}) reg.AddPublicPaths("/sso/callback", "/sso/*") + reg.RegisterAuthenticator(&appTestAuthenticator{}) serverCfg := &server.Config{} applyExtensions(serverCfg, reg) @@ -713,15 +717,85 @@ func TestApplyExtensionsSnapshotsRegistryIntoServerConfig(t *testing.T) { if len(serverCfg.ExtraAuthSkipPaths) != 2 { t.Errorf("ExtraAuthSkipPaths not copied: %v", serverCfg.ExtraAuthSkipPaths) } + if len(serverCfg.RequestAuthenticators) != 1 { + t.Errorf("RequestAuthenticators not copied: %v", serverCfg.RequestAuthenticators) + } // A nil registry must leave the config untouched. empty := &server.Config{} applyExtensions(empty, nil) - if empty.RequestRewriters != nil || empty.ExtraMiddleware != nil || empty.ExtraRoutes != nil || empty.ExtraAuthSkipPaths != nil { + if empty.RequestRewriters != nil || empty.ExtraMiddleware != nil || empty.ExtraRoutes != nil || empty.ExtraAuthSkipPaths != nil || empty.RequestAuthenticators != nil { t.Error("nil registry must not modify server config") } } +type appTestAuthenticator struct{} + +func (*appTestAuthenticator) Name() string { return "test" } + +func (*appTestAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*ext.Authentication, error) { + return nil, nil +} + +type recorderAwareAppAuthenticator struct { + recorder ext.AuthenticationEventRecorder +} + +func (*recorderAwareAppAuthenticator) Name() string { return "recorder-aware" } + +func (*recorderAwareAppAuthenticator) AuthenticateRequest(context.Context, *http.Request) (*ext.Authentication, error) { + return nil, nil +} + +func (a *recorderAwareAppAuthenticator) SetAuthenticationEventRecorder(recorder ext.AuthenticationEventRecorder) { + a.recorder = recorder +} + +type appAuthenticationEventRecorder struct{} + +func (*appAuthenticationEventRecorder) RecordAuthenticationEvent(ext.AuthenticationEvent) {} + +func TestExtensionAuthenticationDetectionAndRecorderBinding(t *testing.T) { + if hasUsableRequestAuthenticator(nil) { + t.Fatal("nil registry reported extension authentication") + } + + registry := &ext.Registry{} + var typedNil *appTestAuthenticator + registry.RegisterAuthenticator(typedNil) + if hasUsableRequestAuthenticator(registry) { + t.Fatal("typed-nil authenticator reported extension authentication") + } + + authenticator := &recorderAwareAppAuthenticator{} + registry.RegisterAuthenticator(authenticator) + if !hasUsableRequestAuthenticator(registry) { + t.Fatal("usable authenticator was not detected") + } + recorder := &appAuthenticationEventRecorder{} + bindAuthenticationEventRecorders(registry, recorder) + if authenticator.recorder != recorder { + t.Fatal("authentication event recorder was not installed") + } +} + +func TestLogStartupInfoTreatsExtensionAuthenticatorAsEffectiveAuth(t *testing.T) { + var logs bytes.Buffer + previous := slog.Default() + slog.SetDefault(slog.New(slog.NewTextHandler(&logs, nil))) + t.Cleanup(func() { slog.SetDefault(previous) }) + + app := &App{config: &config.Config{}, extensionAuth: true} + app.logStartupInfo() + output := logs.String() + if strings.Contains(output, "UNSAFE MODE") || strings.Contains(output, "unauthenticated access allowed") { + t.Fatalf("extension-authenticated startup emitted unsafe warning: %s", output) + } + if !strings.Contains(output, `mode=extension`) { + t.Fatalf("extension authentication mode was not logged: %s", output) + } +} + type staticRewriter struct{ name string } func (r *staticRewriter) Name() string { return r.name } diff --git a/internal/app/lifecycle_test.go b/internal/app/lifecycle_test.go index 0483d9c72..b715f67f3 100644 --- a/internal/app/lifecycle_test.go +++ b/internal/app/lifecycle_test.go @@ -3,9 +3,11 @@ package app import ( "context" "path/filepath" + "strings" "testing" "github.com/enterpilot/gomodel/config" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/providers" ) @@ -48,3 +50,45 @@ func TestNewThenShutdown(t *testing.T) { t.Fatalf("second Shutdown: %v", err) } } + +func TestFailedConstructionDoesNotRebindAuthenticationEventRecorder(t *testing.T) { + t.Chdir(t.TempDir()) + t.Setenv("STORAGE_TYPE", "sqlite") + t.Setenv("SQLITE_PATH", filepath.Join(t.TempDir(), "failed-reload.db")) + t.Setenv("ADMIN_UI_ENABLED", "false") + t.Setenv("ADMIN_ENDPOINTS_ENABLED", "false") + t.Setenv("MCP_ENABLED", "false") + + loaded, err := config.Load() + if err != nil { + t.Fatalf("config.Load: %v", err) + } + // Force a failure late in construction, after the replacement audit logger + // exists. This models a rejected reload while an older generation serves. + enabled := true + loaded.Config.Cache.Response.Semantic = &config.SemanticCacheConfig{ + Enabled: &enabled, + Embedder: config.EmbedderConfig{Provider: "missing", Model: "embedding-model"}, + } + + previous := &appAuthenticationEventRecorder{} + authenticator := &recorderAwareAppAuthenticator{recorder: previous} + registry := &ext.Registry{} + registry.RegisterAuthenticator(authenticator) + + application, err := New(context.Background(), Config{ + AppConfig: loaded, + Factory: providers.NewProviderFactory(), + Extensions: registry, + }) + if err == nil { + _ = application.Shutdown(context.Background()) + t.Fatal("New succeeded with a missing semantic-cache embedder provider") + } + if !strings.Contains(err.Error(), "failed to initialize response cache") { + t.Fatalf("New failed before the intended late construction step: %v", err) + } + if authenticator.recorder != previous { + t.Fatal("failed construction replaced the still-serving generation's authentication event recorder") + } +} diff --git a/internal/auditlog/auditlog.go b/internal/auditlog/auditlog.go index 6f4680861..d327d2500 100644 --- a/internal/auditlog/auditlog.go +++ b/internal/auditlog/auditlog.go @@ -36,6 +36,7 @@ const ( AuthMethodAPIKey = "api_key" AuthMethodMasterKey = "master_key" AuthMethodNoKey = "no_key" + AuthMethodExtension = "extension" ) const ( @@ -98,16 +99,17 @@ type LogEntry struct { StatusCode int `json:"status_code" bson:"status_code"` // Extracted fields for efficient filtering (indexed in relational DBs) - RequestID string `json:"request_id,omitempty" bson:"request_id,omitempty"` - AuthKeyID string `json:"auth_key_id,omitempty" bson:"auth_key_id,omitempty"` - AuthMethod string `json:"auth_method,omitempty" bson:"auth_method,omitempty"` - ClientIP string `json:"client_ip,omitempty" bson:"client_ip,omitempty"` - Method string `json:"method,omitempty" bson:"method,omitempty"` - Path string `json:"path,omitempty" bson:"path,omitempty"` - UserPath string `json:"user_path,omitempty" bson:"user_path,omitempty"` - SessionID string `json:"session_id,omitempty" bson:"session_id,omitempty"` - Stream bool `json:"stream,omitempty" bson:"stream,omitempty"` - ErrorType string `json:"error_type,omitempty" bson:"error_type,omitempty"` + RequestID string `json:"request_id,omitempty" bson:"request_id,omitempty"` + PrincipalID string `json:"principal_id,omitempty" bson:"principal_id,omitempty"` + AuthKeyID string `json:"auth_key_id,omitempty" bson:"auth_key_id,omitempty"` + AuthMethod string `json:"auth_method,omitempty" bson:"auth_method,omitempty"` + ClientIP string `json:"client_ip,omitempty" bson:"client_ip,omitempty"` + Method string `json:"method,omitempty" bson:"method,omitempty"` + Path string `json:"path,omitempty" bson:"path,omitempty"` + UserPath string `json:"user_path,omitempty" bson:"user_path,omitempty"` + SessionID string `json:"session_id,omitempty" bson:"session_id,omitempty"` + Stream bool `json:"stream,omitempty" bson:"stream,omitempty"` + ErrorType string `json:"error_type,omitempty" bson:"error_type,omitempty"` // Data contains flexible request/response information as JSON Data *LogData `json:"data,omitempty" bson:"data,omitempty"` @@ -120,6 +122,9 @@ type LogData struct { // Identity UserAgent string `json:"user_agent,omitempty" bson:"user_agent,omitempty"` APIKeyHash string `json:"api_key_hash,omitempty" bson:"api_key_hash,omitempty"` + // EventType identifies non-request security lifecycle entries written + // through the extension authentication event recorder. + EventType string `json:"event_type,omitempty" bson:"event_type,omitempty"` // Labels are request labels extracted from configured tagging headers. Labels []string `json:"labels,omitempty" bson:"labels,omitempty"` @@ -359,6 +364,8 @@ func RedactHeaders(headers map[string]string) map[string]string { for key, value := range headers { if core.IsCredentialHeader(key) { result[key] = "[REDACTED]" + } else if strings.EqualFold(key, "Location") { + result[key] = core.RedactSensitiveURLQuery(value) } else { result[key] = value } diff --git a/internal/auditlog/auditlog_test.go b/internal/auditlog/auditlog_test.go index 8dcdc1163..b63be4699 100644 --- a/internal/auditlog/auditlog_test.go +++ b/internal/auditlog/auditlog_test.go @@ -82,6 +82,15 @@ func TestRedactHeaders(t *testing.T) { "Accept": "application/json", }, }, + { + name: "redact authentication transaction from location", + input: map[string]string{ + "Location": "https://id.example.com/authorize?client_id=gomodel&code_challenge=challenge&nonce=nonce&state=state", + }, + expected: map[string]string{ + "Location": "https://id.example.com/authorize?client_id=gomodel&code_challenge=REDACTED&nonce=REDACTED&state=REDACTED", + }, + }, { name: "redact authorization", input: map[string]string{ diff --git a/internal/auditlog/authentication_events.go b/internal/auditlog/authentication_events.go new file mode 100644 index 000000000..104c7d938 --- /dev/null +++ b/internal/auditlog/authentication_events.go @@ -0,0 +1,77 @@ +package auditlog + +import ( + "strings" + "time" + + "github.com/google/uuid" + + "github.com/enterpilot/gomodel/ext" + "github.com/enterpilot/gomodel/internal/core" +) + +const authenticationEventProvider = "authentication" + +type authenticationEventRecorder struct { + logger LoggerInterface +} + +// NewAuthenticationEventRecorder adapts extension authentication lifecycle +// events into ordinary durable audit entries. It intentionally uses the same +// logger, retention, storage backend, and shutdown flush as request auditing. +func NewAuthenticationEventRecorder(logger LoggerInterface) ext.AuthenticationEventRecorder { + return &authenticationEventRecorder{logger: logger} +} + +func (r *authenticationEventRecorder) RecordAuthenticationEvent(event ext.AuthenticationEvent) { + if r == nil || r.logger == nil || !r.logger.Config().Enabled { + return + } + + timestamp := event.Timestamp + if timestamp.IsZero() { + timestamp = time.Now() + } + userPath, err := core.NormalizeUserPath(event.UserPath) + if err != nil || userPath == "" { + userPath = "/" + } + method := NormalizeAuthMethod(event.Method) + if method == "" { + method = AuthMethodExtension + } + status := 200 + errorType := "" + eventType := NormalizeAuthMethod(event.Type) + if eventType == "" { + eventType = "authentication" + } + reason := NormalizeAuthMethod(event.Reason) + if strings.EqualFold(strings.TrimSpace(event.Outcome), "failure") { + status = 401 + errorType = "authentication_error" + if reason == "" { + reason = "unspecified" + } + } + + r.logger.Write(&LogEntry{ + ID: uuid.NewString(), + Timestamp: timestamp.UTC(), + Provider: authenticationEventProvider, + StatusCode: status, + RequestID: strings.TrimSpace(event.RequestID), + PrincipalID: strings.TrimSpace(event.PrincipalID), + AuthMethod: method, + ClientIP: strings.TrimSpace(event.ClientIP), + Method: strings.TrimSpace(event.HTTPMethod), + Path: core.RedactSensitiveURLQuery(strings.TrimSpace(event.Path)), + UserPath: userPath, + ErrorType: errorType, + Data: &LogData{ + UserAgent: strings.TrimSpace(event.UserAgent), + EventType: eventType, + ErrorCode: reason, + }, + }) +} diff --git a/internal/auditlog/authentication_events_test.go b/internal/auditlog/authentication_events_test.go new file mode 100644 index 000000000..4bef96e90 --- /dev/null +++ b/internal/auditlog/authentication_events_test.go @@ -0,0 +1,43 @@ +package auditlog + +import ( + "testing" + "time" + + "github.com/enterpilot/gomodel/ext" +) + +func TestAuthenticationEventRecorderWritesDurableAuditEntry(t *testing.T) { + logger := &capturingLogger{cfg: Config{Enabled: true, OnlyModelInteractions: true}} + recorder := NewAuthenticationEventRecorder(logger) + timestamp := time.Date(2026, 8, 7, 12, 0, 0, 0, time.FixedZone("test", 2*60*60)) + recorder.RecordAuthenticationEvent(ext.AuthenticationEvent{ + Timestamp: timestamp, Type: "login", Outcome: "failure", Method: "sso", + RequestID: "request-1", ClientIP: "192.0.2.10", HTTPMethod: "GET", + Path: "/sso/callback?code=secret-code&state=secret-state&id_token=secret-token&return_to=%2Fadmin%2Fdashboard", + UserAgent: "browser", Reason: "group_denied", + }) + + if len(logger.entries) != 1 { + t.Fatalf("entries = %d, want 1", len(logger.entries)) + } + entry := logger.entries[0] + if entry.Provider != authenticationEventProvider || entry.StatusCode != 401 || + entry.AuthMethod != "sso" || + entry.Path != "/sso/callback?code=REDACTED&id_token=REDACTED&return_to=%2Fadmin%2Fdashboard&state=REDACTED" || + entry.ErrorType != "authentication_error" || entry.Data.EventType != "login" || + entry.Data.ErrorCode != "group_denied" { + t.Fatalf("entry = %+v, data = %+v", entry, entry.Data) + } + if entry.Timestamp.Location() != time.UTC || !entry.Timestamp.Equal(timestamp) { + t.Fatalf("timestamp = %v, want %v in UTC", entry.Timestamp, timestamp) + } +} + +func TestAuthenticationEventRecorderNoopsWhenAuditDisabled(t *testing.T) { + logger := &capturingLogger{} + NewAuthenticationEventRecorder(logger).RecordAuthenticationEvent(ext.AuthenticationEvent{Type: "login"}) + if len(logger.entries) != 0 { + t.Fatalf("entries = %d, want none", len(logger.entries)) + } +} diff --git a/internal/auditlog/enrich.go b/internal/auditlog/enrich.go index 99f8b65e6..6e335576f 100644 --- a/internal/auditlog/enrich.go +++ b/internal/auditlog/enrich.go @@ -297,16 +297,32 @@ func EnrichEntryWithCacheType(c *echo.Context, cacheType string) { publishLiveAuditUpdate(c, entry) } +// NormalizeAuthMethod returns a bounded lowercase audit identifier. Extension +// methods are intentionally opaque to Core; restricting their alphabet keeps +// persisted values safe for logs, filters, and metrics without enumerating +// provider-specific mechanisms. +func NormalizeAuthMethod(method string) string { + method = strings.ToLower(strings.TrimSpace(method)) + if method == "" || len(method) > 64 { + return "" + } + for _, char := range method { + if (char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char == '_' || char == '-' || char == '.' { + continue + } + return "" + } + return method +} + // EnrichEntryWithAuthMethod records which authentication mechanism was used for the request. func EnrichEntryWithAuthMethod(c *echo.Context, method string) { entry := entryFromContext(c) if entry == nil { return } - method = strings.ToLower(strings.TrimSpace(method)) - switch method { - case AuthMethodAPIKey, AuthMethodMasterKey, AuthMethodNoKey, "unknown": - default: + method = NormalizeAuthMethod(method) + if method == "" { return } entry.AuthMethod = method @@ -327,6 +343,21 @@ func EnrichEntryWithAuthKeyID(c *echo.Context, authKeyID string) { publishLiveAuditUpdate(c, entry) } +// EnrichEntryWithPrincipalID attaches an extension-authenticated principal to +// the live audit entry. +func EnrichEntryWithPrincipalID(c *echo.Context, principalID string) { + entry := entryFromContext(c) + if entry == nil { + return + } + principalID = strings.TrimSpace(principalID) + if principalID == "" { + return + } + entry.PrincipalID = principalID + publishLiveAuditUpdate(c, entry) +} + // EnrichEntryWithUserPath attaches the effective user path to the live audit entry. func EnrichEntryWithUserPath(c *echo.Context, userPath string) { entry := entryFromContext(c) diff --git a/internal/auditlog/middleware.go b/internal/auditlog/middleware.go index 1767cca29..ef833f99f 100644 --- a/internal/auditlog/middleware.go +++ b/internal/auditlog/middleware.go @@ -21,6 +21,7 @@ import ( "github.com/google/uuid" "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/core" ) @@ -207,6 +208,14 @@ func applyAuthentication(entry *LogEntry, ctx context.Context) { if authKeyID := strings.TrimSpace(core.GetAuthKeyID(ctx)); authKeyID != "" { entry.AuthKeyID = authKeyID } + if authentication, ok := ext.AuthenticationFromContext(ctx); ok { + if principalID := strings.TrimSpace(authentication.PrincipalID); principalID != "" { + entry.PrincipalID = principalID + } + if authMethod := NormalizeAuthMethod(authentication.Method); authMethod != "" { + entry.AuthMethod = authMethod + } + } if userPath := strings.TrimSpace(core.UserPathFromContext(ctx)); userPath != "" { entry.UserPath = userPath } diff --git a/internal/auditlog/middleware_auth_method_test.go b/internal/auditlog/middleware_auth_method_test.go index 85d34659c..0b650f841 100644 --- a/internal/auditlog/middleware_auth_method_test.go +++ b/internal/auditlog/middleware_auth_method_test.go @@ -3,12 +3,13 @@ package auditlog import ( "net/http" "net/http/httptest" + "strings" "testing" "github.com/labstack/echo/v5" ) -func TestEnrichEntryWithAuthMethodTrimsAndValidatesAllowedValues(t *testing.T) { +func TestEnrichEntryWithAuthMethodTrimsAndValidatesIdentifiers(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() @@ -35,9 +36,14 @@ func TestEnrichEntryWithAuthMethodTrimsAndValidatesAllowedValues(t *testing.T) { if entry.AuthMethod != "unknown" { t.Fatalf("entry auth method = %q, want %q", entry.AuthMethod, "unknown") } + + EnrichEntryWithAuthMethod(c, " OAuth ") + if entry.AuthMethod != "oauth" { + t.Fatalf("entry auth method = %q, want %q", entry.AuthMethod, "oauth") + } } -func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsupportedValues(t *testing.T) { +func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsafeValues(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) rec := httptest.NewRecorder() @@ -50,8 +56,35 @@ func TestEnrichEntryWithAuthMethodIgnoresBlankAndUnsupportedValues(t *testing.T) t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) } - EnrichEntryWithAuthMethod(c, "oauth") + EnrichEntryWithAuthMethod(c, "oauth\nsecret") if entry.AuthMethod != "" { t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) } + + EnrichEntryWithAuthMethod(c, strings.Repeat("a", 65)) + if entry.AuthMethod != "" { + t.Fatalf("entry auth method = %q, want empty", entry.AuthMethod) + } +} + +func TestEnrichEntryWithPrincipalIDTrimsAndPreservesExistingValue(t *testing.T) { + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + entry := &LogEntry{PrincipalID: "existing"} + c.Set(string(LogEntryKey), entry) + + EnrichEntryWithPrincipalID(c, " ") + if entry.PrincipalID != "existing" { + t.Fatalf("blank principal replaced existing value with %q", entry.PrincipalID) + } + + EnrichEntryWithPrincipalID(c, " oidc:principal-1 ") + if entry.PrincipalID != "oidc:principal-1" { + t.Fatalf("principal ID = %q, want oidc:principal-1", entry.PrincipalID) + } + + withoutEntry := e.NewContext(req, httptest.NewRecorder()) + EnrichEntryWithPrincipalID(withoutEntry, "ignored") } diff --git a/internal/auditlog/middleware_test.go b/internal/auditlog/middleware_test.go index 81a767838..75250889b 100644 --- a/internal/auditlog/middleware_test.go +++ b/internal/auditlog/middleware_test.go @@ -9,6 +9,7 @@ import ( "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/core" ) @@ -33,6 +34,31 @@ func TestApplyAuthenticationKeepsLabelsWhenContextHasNone(t *testing.T) { } } +func TestApplyAuthenticationPersistsExtensionPrincipal(t *testing.T) { + entry := &LogEntry{} + ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: "oidc:principal-1", Method: "oidc"}) + + applyAuthentication(entry, ctx) + + if entry.PrincipalID != "oidc:principal-1" { + t.Fatalf("PrincipalID = %q, want oidc:principal-1", entry.PrincipalID) + } + if entry.AuthMethod != "oidc" { + t.Fatalf("AuthMethod = %q, want oidc", entry.AuthMethod) + } +} + +func TestApplyAuthenticationDoesNotReplacePrincipalWithBlank(t *testing.T) { + entry := &LogEntry{PrincipalID: "existing-principal"} + ctx := ext.WithAuthentication(t.Context(), ext.Authentication{PrincipalID: " "}) + + applyAuthentication(entry, ctx) + + if entry.PrincipalID != "existing-principal" { + t.Fatalf("PrincipalID = %q, want existing-principal", entry.PrincipalID) + } +} + func TestEnrichEntryWithWorkflow_PrefersProviderNameForResolvedModel(t *testing.T) { e := echo.New() req := httptest.NewRequest(http.MethodGet, "/", nil) diff --git a/internal/auditlog/reader_mongodb.go b/internal/auditlog/reader_mongodb.go index 918539fa1..d46270845 100644 --- a/internal/auditlog/reader_mongodb.go +++ b/internal/auditlog/reader_mongodb.go @@ -32,6 +32,7 @@ type mongoLogRow struct { CacheType string `bson:"cache_type"` StatusCode int `bson:"status_code"` RequestID string `bson:"request_id"` + PrincipalID string `bson:"principal_id"` AuthKeyID string `bson:"auth_key_id"` AuthMethod string `bson:"auth_method"` ClientIP string `bson:"client_ip"` @@ -58,6 +59,7 @@ func (r mongoLogRow) toLogEntry() *LogEntry { CacheType: normalizeCacheType(r.CacheType), StatusCode: r.StatusCode, RequestID: r.RequestID, + PrincipalID: r.PrincipalID, AuthKeyID: r.AuthKeyID, AuthMethod: r.AuthMethod, ClientIP: r.ClientIP, diff --git a/internal/auditlog/reader_sql.go b/internal/auditlog/reader_sql.go index 7c953dd72..bb2b1ad36 100644 --- a/internal/auditlog/reader_sql.go +++ b/internal/auditlog/reader_sql.go @@ -90,7 +90,7 @@ const sqliteTimestampBoundaryLayout = "2006-01-02T15:04:05" const logColumns = `id, timestamp, duration_ns, requested_model, resolved_model, provider, provider_name, alias_used, workflow_version_id, cache_type, status_code, - request_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, + request_id, principal_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, stream, error_type, data` const selectLogColumns = `SELECT ` + logColumns + ` @@ -372,6 +372,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { providerName *string workflowVersionID *string cacheType *string + principalID *string authKeyID *string authMethod *string userPath *string @@ -383,7 +384,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { if err := scanner.Scan( &entry.ID, ×tamp, &entry.DurationNs, &entry.RequestedModel, &entry.ResolvedModel, &entry.Provider, &providerName, &entry.AliasUsed, &workflowVersionID, &cacheType, - &entry.StatusCode, &entry.RequestID, &authKeyID, &authMethod, &entry.ClientIP, + &entry.StatusCode, &entry.RequestID, &principalID, &authKeyID, &authMethod, &entry.ClientIP, &entry.Method, &entry.Path, &userPath, &sessionID, &entry.Stream, &errorType, &dataJSON, ); err != nil { return nil, fmt.Errorf("failed to scan audit log row: %w", err) @@ -394,6 +395,7 @@ func scanSQLLogEntry(scanner sqlx.Row) (*LogEntry, error) { } entry.Timestamp = timestamp.Time entry.WorkflowVersionID = sqlutil.DerefTrimmed(workflowVersionID) + entry.PrincipalID = derefString(principalID) entry.AuthKeyID = derefString(authKeyID) entry.AuthMethod = derefString(authMethod) entry.UserPath = derefString(userPath) diff --git a/internal/auditlog/store_mongodb.go b/internal/auditlog/store_mongodb.go index 751af50e7..5b8a930d1 100644 --- a/internal/auditlog/store_mongodb.go +++ b/internal/auditlog/store_mongodb.go @@ -82,6 +82,9 @@ func NewMongoDBStore(database *mongo.Database, retentionDays int) (*MongoDBStore { Keys: bson.D{{Key: "request_id", Value: 1}}, }, + { + Keys: bson.D{{Key: "principal_id", Value: 1}}, + }, { Keys: bson.D{{Key: "auth_key_id", Value: 1}}, }, diff --git a/internal/auditlog/store_sql.go b/internal/auditlog/store_sql.go index 4942df2fb..0ae1c00a3 100644 --- a/internal/auditlog/store_sql.go +++ b/internal/auditlog/store_sql.go @@ -13,12 +13,12 @@ import ( ) // SQLite allows 999 bindable parameters per statement -// (SQLITE_MAX_VARIABLE_NUMBER). At 22 columns per entry that is 45 entries, +// (SQLITE_MAX_VARIABLE_NUMBER). At 23 columns per entry that is 43 entries, // so larger batches are chunked. PostgreSQL's limit is far higher, but one // chunk size keeps the write path identical on both. const ( maxSQLParams = 999 - columnsPerEntry = 22 + columnsPerEntry = 23 maxEntriesPerBatch = maxSQLParams / columnsPerEntry ) @@ -46,6 +46,7 @@ var sqlTables = []string{ cache_type TEXT, status_code INTEGER DEFAULT 0, request_id TEXT, + principal_id TEXT, auth_key_id TEXT, auth_method TEXT, client_ip TEXT, @@ -87,6 +88,7 @@ var sqlMigrations = []string{ "ALTER TABLE audit_logs ADD COLUMN alias_used " + sqlx.TypeBool + " DEFAULT FALSE", "ALTER TABLE audit_logs ADD COLUMN workflow_version_id TEXT", "ALTER TABLE audit_logs ADD COLUMN cache_type TEXT", + "ALTER TABLE audit_logs ADD COLUMN principal_id TEXT", "ALTER TABLE audit_logs ADD COLUMN auth_key_id TEXT", "ALTER TABLE audit_logs ADD COLUMN auth_method TEXT", "ALTER TABLE audit_logs ADD COLUMN user_path TEXT", @@ -106,6 +108,7 @@ var sqlIndexes = []string{ "CREATE INDEX IF NOT EXISTS idx_audit_provider_name ON audit_logs(provider_name)", "CREATE INDEX IF NOT EXISTS idx_audit_workflow_version_id ON audit_logs(workflow_version_id)", "CREATE INDEX IF NOT EXISTS idx_audit_request_id ON audit_logs(request_id)", + "CREATE INDEX IF NOT EXISTS idx_audit_principal_id ON audit_logs(principal_id)", "CREATE INDEX IF NOT EXISTS idx_audit_auth_key_id ON audit_logs(auth_key_id)", "CREATE INDEX IF NOT EXISTS idx_audit_client_ip ON audit_logs(client_ip)", "CREATE INDEX IF NOT EXISTS idx_audit_path ON audit_logs(path)", @@ -125,7 +128,7 @@ var sqlIndexes = []string{ const insertAuditLogPrefix = `INSERT INTO audit_logs ( id, timestamp, duration_ns, requested_model, resolved_model, provider, provider_name, alias_used, workflow_version_id, cache_type, status_code, - request_id, auth_key_id, auth_method, client_ip, method, path, user_path, + request_id, principal_id, auth_key_id, auth_method, client_ip, method, path, user_path, session_id, stream, error_type, data ) VALUES ` @@ -216,7 +219,7 @@ func (s *SQLStore) WriteBatch(ctx context.Context, entries []*LogEntry) error { placeholders := make([]string, len(chunk)) values := make([]any, 0, len(chunk)*columnsPerEntry) for j, e := range chunk { - placeholders[j] = "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + placeholders[j] = "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" values = append(values, auditLogValues(dialect, e)...) } @@ -259,6 +262,7 @@ func auditLogValues(dialect sqlx.Dialect, e *LogEntry) []any { cacheTypeValue, e.StatusCode, e.RequestID, + e.PrincipalID, e.AuthKeyID, e.AuthMethod, e.ClientIP, diff --git a/internal/auditlog/store_sql_test.go b/internal/auditlog/store_sql_test.go index 7289cf520..2eb99a546 100644 --- a/internal/auditlog/store_sql_test.go +++ b/internal/auditlog/store_sql_test.go @@ -38,6 +38,7 @@ func testLogEntry(id string, at time.Time) *LogEntry { CacheType: CacheTypeExact, StatusCode: 200, RequestID: "req-" + id, + PrincipalID: "oidc:principal-1", AuthKeyID: "auth-key-1", AuthMethod: "bearer", ClientIP: "127.0.0.1", @@ -57,25 +58,31 @@ func TestSQLStoreWriteBatchRoundTrip(t *testing.T) { t.Fatalf("WriteBatch: %v", err) } - var ( - requestedModel, userPath string - aliasUsed, stream bool - statusCode int - ) - err := db.QueryRow(ctx, ` - SELECT requested_model, user_path, alias_used, stream, status_code - FROM audit_logs WHERE id = ? - `, "log-1").Scan(&requestedModel, &userPath, &aliasUsed, &stream, &statusCode) + reader, err := NewSQLReader(db) if err != nil { - t.Fatalf("read back: %v", err) + t.Fatalf("NewSQLReader: %v", err) } - if requestedModel != "gpt-4o-mini" || userPath != "/team" || statusCode != 200 { - t.Errorf("row = (%q, %q, %d), want (gpt-4o-mini, /team, 200)", requestedModel, userPath, statusCode) + result, err := reader.GetLogs(ctx, LogQueryParams{Limit: 10, OmitAttempts: true}) + if err != nil { + t.Fatalf("GetLogs: %v", err) + } + if len(result.Entries) != 1 { + t.Fatalf("entries = %d, want 1", len(result.Entries)) + } + entry := result.Entries[0] + if entry.RequestedModel != "gpt-4o-mini" || entry.UserPath != "/team" || entry.StatusCode != 200 { + t.Errorf("entry = (%q, %q, %d), want (gpt-4o-mini, /team, 200)", entry.RequestedModel, entry.UserPath, entry.StatusCode) + } + if entry.PrincipalID != "oidc:principal-1" { + t.Errorf("principal_id = %q, want oidc:principal-1", entry.PrincipalID) + } + if entry.RequestID != "req-log-1" || entry.AuthKeyID != "auth-key-1" || entry.AuthMethod != "bearer" { + t.Errorf("auth fields = (%q, %q, %q), want (req-log-1, auth-key-1, bearer)", entry.RequestID, entry.AuthKeyID, entry.AuthMethod) } // Booleans round-trip as booleans on both engines, without an // int-conversion helper on either side. - if !aliasUsed || !stream { - t.Errorf("alias_used=%v stream=%v, want both true", aliasUsed, stream) + if !entry.AliasUsed || !entry.Stream { + t.Errorf("alias_used=%v stream=%v, want both true", entry.AliasUsed, entry.Stream) } }) } diff --git a/internal/auditlog/stream_wrapper.go b/internal/auditlog/stream_wrapper.go index 0f1771716..f85dcda95 100644 --- a/internal/auditlog/stream_wrapper.go +++ b/internal/auditlog/stream_wrapper.go @@ -236,15 +236,16 @@ func CreateStreamEntry(ctx context.Context, baseEntry *LogEntry) *LogEntry { CacheType: baseEntry.CacheType, StatusCode: baseEntry.StatusCode, // Copy extracted fields - RequestID: baseEntry.RequestID, - AuthKeyID: baseEntry.AuthKeyID, - AuthMethod: baseEntry.AuthMethod, - ClientIP: baseEntry.ClientIP, - Method: baseEntry.Method, - Path: baseEntry.Path, - UserPath: baseEntry.UserPath, - SessionID: baseEntry.SessionID, - Stream: true, // Mark as streaming + RequestID: baseEntry.RequestID, + PrincipalID: baseEntry.PrincipalID, + AuthKeyID: baseEntry.AuthKeyID, + AuthMethod: baseEntry.AuthMethod, + ClientIP: baseEntry.ClientIP, + Method: baseEntry.Method, + Path: baseEntry.Path, + UserPath: baseEntry.UserPath, + SessionID: baseEntry.SessionID, + Stream: true, // Mark as streaming } // This is a whitelist copy, so every request-side field of LogData must be @@ -257,6 +258,7 @@ func CreateStreamEntry(ctx context.Context, baseEntry *LogEntry) *LogEntry { entryCopy.Data = &LogData{ UserAgent: baseEntry.Data.UserAgent, APIKeyHash: baseEntry.Data.APIKeyHash, + EventType: baseEntry.Data.EventType, Labels: baseEntry.Data.Labels, Temperature: baseEntry.Data.Temperature, MaxTokens: baseEntry.Data.MaxTokens, diff --git a/internal/core/url_redaction.go b/internal/core/url_redaction.go new file mode 100644 index 000000000..5cfc3c91c --- /dev/null +++ b/internal/core/url_redaction.go @@ -0,0 +1,76 @@ +package core + +import ( + "net/url" + "strings" +) + +var sensitiveURLQueryKeys = map[string]struct{}{ + "access_token": {}, + "client_secret": {}, + "code": {}, + "code_challenge": {}, + "code_verifier": {}, + "error_description": {}, + "id_token": {}, + "nonce": {}, + "refresh_token": {}, + "state": {}, + "token": {}, +} + +// RedactSensitiveURLQuery removes credential and authentication-transaction +// values from an absolute or relative URL while preserving ordinary query +// parameters. Malformed sensitive queries fail closed by dropping the query. +func RedactSensitiveURLQuery(raw string) string { + // The model-serving hot path normally has no query string. Avoid URL parsing + // and allocations unless there is something that may require redaction. + if strings.IndexByte(raw, '?') < 0 { + return raw + } + parsed, err := url.Parse(raw) + if err != nil { + return redactMalformedSensitiveQuery(raw) + } + if parsed.RawQuery == "" { + return raw + } + values, err := url.ParseQuery(parsed.RawQuery) + if err != nil { + return redactMalformedSensitiveQuery(raw) + } + changed := false + for key := range values { + if _, sensitive := sensitiveURLQueryKeys[strings.ToLower(key)]; sensitive { + values[key] = []string{"REDACTED"} + changed = true + } + } + if !changed { + return raw + } + parsed.RawQuery = values.Encode() + return parsed.String() +} + +func redactMalformedSensitiveQuery(raw string) string { + queryAt := strings.IndexByte(raw, '?') + if queryAt < 0 || !containsSensitiveURLQueryKey(raw[queryAt+1:]) { + return raw + } + return raw[:queryAt] +} + +func containsSensitiveURLQueryKey(rawQuery string) bool { + for _, field := range strings.FieldsFunc(rawQuery, func(r rune) bool { return r == '&' || r == ';' }) { + key, _, _ := strings.Cut(field, "=") + decoded, err := url.QueryUnescape(key) + if err != nil { + decoded = key + } + if _, sensitive := sensitiveURLQueryKeys[strings.ToLower(decoded)]; sensitive { + return true + } + } + return false +} diff --git a/internal/server/admin_access_test.go b/internal/server/admin_access_test.go index b3ab47a1e..0beef81c4 100644 --- a/internal/server/admin_access_test.go +++ b/internal/server/admin_access_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/admin" ) @@ -99,3 +100,52 @@ func TestAdminGate_LockoutRecoveryPathStaysOpen(t *testing.T) { status, _ := adminGateStatus(t, srv, "/admin/auth-keys", "") assert.Equal(t, http.StatusServiceUnavailable, status) } + +func TestAdminGate_RequestAuthenticatorDisablesAnonymousRecoveryBypass(t *testing.T) { + tests := []struct { + name string + identity *ext.Authentication + wantStatus int + }{ + {name: "anonymous", wantStatus: http.StatusUnauthorized}, + { + name: "identity without dashboard access", + identity: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one", Method: "oidc"}, + wantStatus: http.StatusForbidden, + }, + { + name: "identity with dashboard access", + identity: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one", Method: "oidc", DashboardAccess: true}, + wantStatus: http.StatusServiceUnavailable, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + srv := New(&mockProvider{}, &Config{ + AdminEndpointsEnabled: true, + AdminHandler: admin.NewHandler(nil, nil), + RequestAuthenticators: []ext.RequestAuthenticator{&mockRequestAuthenticator{result: tt.identity}}, + }) + status, body := adminGateStatus(t, srv, "/admin/auth-keys", "") + assert.Equal(t, tt.wantStatus, status) + if tt.wantStatus == http.StatusForbidden { + errObj, ok := body["error"].(map[string]any) + require.True(t, ok) + assert.Equal(t, "identity does not have dashboard access", errObj["message"]) + } + }) + } +} + +func TestAdminGate_NilRequestAuthenticatorsKeepRecoveryBypass(t *testing.T) { + var typedNil *mockRequestAuthenticator + for _, authenticators := range [][]ext.RequestAuthenticator{{nil}, {typedNil}} { + srv := New(&mockProvider{}, &Config{ + AdminEndpointsEnabled: true, + AdminHandler: admin.NewHandler(nil, nil), + RequestAuthenticators: authenticators, + }) + status, _ := adminGateStatus(t, srv, "/admin/auth-keys", "") + assert.Equal(t, http.StatusServiceUnavailable, status) + } +} diff --git a/internal/server/auth.go b/internal/server/auth.go index c2b25e02a..e6b6c1434 100644 --- a/internal/server/auth.go +++ b/internal/server/auth.go @@ -5,10 +5,12 @@ import ( "crypto/subtle" "errors" "net/http" + "reflect" "strings" "github.com/labstack/echo/v5" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/auditlog" "github.com/enterpilot/gomodel/internal/authkeys" "github.com/enterpilot/gomodel/internal/core" @@ -26,11 +28,19 @@ type BearerTokenAuthenticator interface { // key service. If no auth mechanism is configured, no authentication is // required. skipPaths is a list of paths that should bypass authentication. func AuthMiddlewareWithAuthenticator(masterKey string, authenticator BearerTokenAuthenticator, skipPaths []string, userPathHeader ...string) echo.MiddlewareFunc { + return AuthMiddlewareWithRequestAuthenticators(masterKey, authenticator, nil, skipPaths, userPathHeader...) +} + +// AuthMiddlewareWithRequestAuthenticators additionally accepts extension +// authenticators such as OIDC sessions. Explicit bearer credentials always +// take precedence over ambient request credentials such as cookies. +func AuthMiddlewareWithRequestAuthenticators(masterKey string, authenticator BearerTokenAuthenticator, requestAuthenticators []ext.RequestAuthenticator, skipPaths []string, userPathHeader ...string) echo.MiddlewareFunc { userPathHeaderName := configuredUserPathHeaderName(userPathHeader...) + hasRequestAuthenticator := hasRequestAuthenticators(requestAuthenticators) return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { // If no auth mechanism is configured, allow all requests. - if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) { + if masterKey == "" && (authenticator == nil || !authenticator.Enabled()) && !hasRequestAuthenticator { auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodNoKey) setInteractionContinuationAllowed(c, true) return next(c) @@ -53,43 +63,139 @@ func AuthMiddlewareWithAuthenticator(masterKey string, authenticator BearerToken } token, tokenErr := requestAuthToken(c.Request()) - if tokenErr != "" { - authErr := authenticationError(c, tokenErr) - return writeGatewayError(c, authErr) - } - if masterKey != "" && subtle.ConstantTimeCompare([]byte(token), []byte(masterKey)) == 1 { - auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodMasterKey) - setInteractionContinuationAllowed(c, true) - return next(c) - } - - if authenticator != nil && authenticator.Enabled() { - auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodAPIKey) - authResult, err := authenticator.Authenticate(c.Request().Context(), token) - if err == nil { - applyAuthKeyResult(c, authResult, userPathHeaderName) + hasExplicitCredential := c.Request().Header.Get("Authorization") != "" || c.Request().Header.Get("x-api-key") != "" + if hasExplicitCredential { + // Explicit credentials take precedence over ambient extension + // sessions. Hide every identity value installed by outer extension + // middleware before validating the selected credential; clearing only + // the response header would leave downstream context consumers scoped + // to the wrong principal. + setAuthenticationUserHeader(c, "") + ctx := ext.WithoutAuthentication(c.Request().Context()) + ctx = core.WithEffectiveUserPath(ctx, "") + c.SetRequest(c.Request().WithContext(ctx)) + if tokenErr != "" { + authErr := authenticationError(c, tokenErr) + return writeGatewayError(c, authErr) + } + if masterKey != "" && subtle.ConstantTimeCompare([]byte(token), []byte(masterKey)) == 1 { + auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodMasterKey) + setInteractionContinuationAllowed(c, true) return next(c) } - authErr := authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed") - return writeGatewayError(c, authErr) + if authenticator != nil && authenticator.Enabled() { + auditlog.EnrichEntryWithAuthMethod(c, auditlog.AuthMethodAPIKey) + authResult, err := authenticator.Authenticate(c.Request().Context(), token) + if err == nil { + applyAuthKeyResult(c, authResult, userPathHeaderName) + return next(c) + } + + authErr := authenticationErrorWithAudit(c, authFailureMessage(err), "authentication failed") + return writeGatewayError(c, authErr) + } + message := "invalid credentials" + if masterKey != "" && (authenticator == nil || !authenticator.Enabled()) { + message = "invalid master key" + } + return writeGatewayError(c, authenticationError(c, message)) + } + + for _, requestAuthenticator := range requestAuthenticators { + if requestAuthenticatorIsNil(requestAuthenticator) { + continue + } + result, err := requestAuthenticator.AuthenticateRequest(c.Request().Context(), c.Request()) + if err != nil { + return writeGatewayError(c, extensionAuthenticationError(c)) + } + if result == nil { + continue + } + if err := applyExtensionAuthResult(c, result, userPathHeaderName); err != nil { + return writeGatewayError(c, extensionAuthenticationError(c)) + } + return next(c) } - authErr := authenticationError(c, "invalid master key") + authErr := authenticationError(c, tokenErr) return writeGatewayError(c, authErr) } } } +func hasRequestAuthenticators(authenticators []ext.RequestAuthenticator) bool { + for _, authenticator := range authenticators { + if !requestAuthenticatorIsNil(authenticator) { + return true + } + } + return false +} + +func requestAuthenticatorIsNil(authenticator ext.RequestAuthenticator) bool { + if authenticator == nil { + return true + } + value := reflect.ValueOf(authenticator) + switch value.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice: + return value.IsNil() + default: + return false + } +} + +func applyExtensionAuthResult(c *echo.Context, result *ext.Authentication, userPathHeaderName string) error { + if result == nil { + return errors.New("extension authenticator returned no identity") + } + principalID := strings.TrimSpace(result.PrincipalID) + if principalID == "" { + return errors.New("extension authenticator returned an empty principal id") + } + userPath, err := core.NormalizeUserPath(result.UserPath) + if err != nil { + return err + } + normalized := *result + normalized.PrincipalID = principalID + normalized.UserPath = userPath + normalized.Method = auditlog.NormalizeAuthMethod(result.Method) + if normalized.Method == "" { + normalized.Method = auditlog.AuthMethodExtension + } + ctx := context.WithValue(c.Request().Context(), managedDashboardAccessKey{}, normalized.DashboardAccess) + ctx = context.WithValue(ctx, interactionContinuationAllowedKey{}, normalized.DashboardAccess) + ctx = ext.WithAuthentication(ctx, normalized) + if len(normalized.Labels) > 0 { + ctx = core.WithRequestLabels(ctx, core.MergeLabels(core.RequestLabelsFromContext(ctx), normalized.Labels)) + } + if userPath != "" { + ctx = core.WithEffectiveUserPath(ctx, userPath) + ctx = core.WithUserPathHeaderName(ctx, userPathHeaderName) + if snapshot := core.GetRequestSnapshot(ctx); snapshot != nil { + ctx = core.WithRequestSnapshot(ctx, snapshot.WithUserPathHeader(userPath, userPathHeaderName)) + } + c.Request().Header.Set(userPathHeaderName, userPath) + auditlog.EnrichEntryWithUserPath(c, userPath) + } + c.SetRequest(c.Request().WithContext(ctx)) + setAuthenticationUserHeader(c, userPath) + auditlog.EnrichEntryWithAuthMethod(c, normalized.Method) + auditlog.EnrichEntryWithPrincipalID(c, normalized.PrincipalID) + return nil +} + // AdminAccessMiddleware denies admin API requests authenticated with a -// managed key that lacks dashboard access. Master-key requests and requests -// that skipped authentication (the no-master-key lockout recovery path) pass -// through unchanged. +// managed key or extension identity that lacks dashboard access. Master-key +// requests and requests that skipped authentication pass through unchanged. func AdminAccessMiddleware() echo.MiddlewareFunc { return func(next echo.HandlerFunc) echo.HandlerFunc { return func(c *echo.Context) error { if allowed, isManagedKey := managedDashboardAccess(c.Request().Context()); isManagedKey && !allowed { - const message = "API key does not have dashboard access" + const message = "identity does not have dashboard access" auditlog.EnrichEntryWithError(c, string(core.ErrorTypeAuthentication), message) gatewayErr := (&core.GatewayError{ Type: core.ErrorTypeAuthentication, @@ -103,6 +209,15 @@ func AdminAccessMiddleware() echo.MiddlewareFunc { } } +func extensionAuthenticationError(c *echo.Context) *core.GatewayError { + const ( + message = "authentication failed" + code = "extension_authentication_failed" + ) + auditlog.EnrichEntryWithError(c, string(core.ErrorTypeAuthentication), message, code) + return core.NewAuthenticationError("", message).WithCode(code) +} + // requestAuthToken extracts the caller's credential from the request. The // primary scheme is "Authorization: Bearer "; the Anthropic-native // "x-api-key: " header is accepted as a fallback so Anthropic SDK @@ -171,9 +286,17 @@ func applyAuthKeyResult(c *echo.Context, authResult authkeys.AuthenticationResul auditlog.EnrichEntryWithUserPath(c, userPath) } c.SetRequest(c.Request().WithContext(ctx)) + setAuthenticationUserHeader(c, strings.TrimSpace(authResult.UserPath)) auditlog.EnrichEntryWithAuthKeyID(c, authResult.ID) } +func setAuthenticationUserHeader(c *echo.Context, userPath string) { + if c == nil { + return + } + c.Response().Header().Set(ext.AuthenticationUserHeader, strings.TrimSpace(userPath)) +} + func authFailureMessage(err error) string { if err == nil { return "invalid API key" diff --git a/internal/server/auth_test.go b/internal/server/auth_test.go index 0c789354f..7d0b3e1eb 100644 --- a/internal/server/auth_test.go +++ b/internal/server/auth_test.go @@ -3,6 +3,7 @@ package server import ( "context" "crypto/subtle" + "errors" "net/http" "net/http/httptest" "strings" @@ -12,11 +13,25 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/enterpilot/gomodel/ext" "github.com/enterpilot/gomodel/internal/auditlog" "github.com/enterpilot/gomodel/internal/authkeys" "github.com/enterpilot/gomodel/internal/core" ) +type mockRequestAuthenticator struct { + result *ext.Authentication + err error + calls int +} + +func (m *mockRequestAuthenticator) Name() string { return "mock-request-auth" } + +func (m *mockRequestAuthenticator) AuthenticateRequest(_ context.Context, _ *http.Request) (*ext.Authentication, error) { + m.calls++ + return m.result, m.err +} + type mockAuthenticator struct { enabled bool tokenToID map[string]string @@ -247,6 +262,174 @@ func TestAuthMiddlewareWithAuthenticator_ManagedKeyEnrichesContextAndAudit(t *te assert.Equal(t, "ok", rec.Body.String()) } +func TestAuthMiddlewareWithRequestAuthenticatorEnrichesRequest(t *testing.T) { + e := echo.New() + requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ + PrincipalID: " oidc:principal-1 ", + UserPath: " /users/person@example.com/ ", + Labels: []string{"sso"}, + DashboardAccess: true, + Method: " OIDC ", + }} + handler := RequestSnapshotCapture()(AuthMiddlewareWithRequestAuthenticators( + "", nil, []ext.RequestAuthenticator{requestAuth}, nil, + )(func(c *echo.Context) error { + assert.Equal(t, "/users/person@example.com", core.UserPathFromContext(c.Request().Context())) + assert.Equal(t, []string{"sso"}, core.RequestLabelsFromContext(c.Request().Context())) + assert.True(t, interactionContinuationAllowed(c.Request().Context())) + identity, ok := ext.AuthenticationFromContext(c.Request().Context()) + assert.True(t, ok) + assert.Equal(t, "oidc:principal-1", identity.PrincipalID) + assert.Equal(t, "/users/person@example.com", identity.UserPath) + assert.Equal(t, "oidc", identity.Method) + entry := c.Get(string(auditlog.LogEntryKey)).(*auditlog.LogEntry) + assert.Equal(t, "oidc", entry.AuthMethod) + assert.Equal(t, "oidc:principal-1", entry.PrincipalID) + assert.Equal(t, "/users/person@example.com", entry.UserPath) + return c.NoContent(http.StatusNoContent) + })) + + req := httptest.NewRequest(http.MethodGet, "/admin/usage", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + c.Set(string(auditlog.LogEntryKey), &auditlog.LogEntry{Data: &auditlog.LogData{}}) + require.NoError(t, handler(c)) + assert.Equal(t, http.StatusNoContent, rec.Code) + assert.Equal(t, "/users/person@example.com", rec.Header().Get(ext.AuthenticationUserHeader)) + assert.Equal(t, 1, requestAuth.calls) +} + +func TestAuthMiddlewareWithRequestAuthenticatorsFailurePaths(t *testing.T) { + secretError := errors.New("provider rejected cookie=super-secret") + tests := []struct { + name string + auths []*mockRequestAuthenticator + adminGate bool + wantStatus int + wantCalls []int + wantExtensionFailure bool + }{ + { + name: "authenticator error is sanitized", + auths: []*mockRequestAuthenticator{{err: secretError}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "nil result falls through to next authenticator", + auths: []*mockRequestAuthenticator{{}, {result: &ext.Authentication{ + PrincipalID: "principal-1", UserPath: "/users/one", DashboardAccess: true, Method: "saml", + }}}, + wantStatus: http.StatusNoContent, wantCalls: []int{1, 1}, + }, + { + name: "all nil results reject missing credentials", + auths: []*mockRequestAuthenticator{{}, {}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1, 1}, + }, + { + name: "empty principal is rejected", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: " ", UserPath: "/users/one"}}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "invalid user path is rejected", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/../admin"}}}, + wantStatus: http.StatusUnauthorized, wantCalls: []int{1}, wantExtensionFailure: true, + }, + { + name: "identity without dashboard access is forbidden", + auths: []*mockRequestAuthenticator{{result: &ext.Authentication{PrincipalID: "principal-1", UserPath: "/users/one"}}}, + adminGate: true, wantStatus: http.StatusForbidden, wantCalls: []int{1}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + authenticators := make([]ext.RequestAuthenticator, len(tt.auths)) + for i, authenticator := range tt.auths { + authenticators[i] = authenticator + } + next := echo.HandlerFunc(func(c *echo.Context) error { return c.NoContent(http.StatusNoContent) }) + if tt.adminGate { + next = AdminAccessMiddleware()(next) + } + handler := AuthMiddlewareWithRequestAuthenticators("", nil, authenticators, nil)(next) + + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/admin/auth-keys", nil) + rec := httptest.NewRecorder() + c := e.NewContext(req, rec) + entry := &auditlog.LogEntry{Data: &auditlog.LogData{}} + c.Set(string(auditlog.LogEntryKey), entry) + require.NoError(t, handler(c)) + assert.Equal(t, tt.wantStatus, rec.Code) + for i, wantCalls := range tt.wantCalls { + assert.Equal(t, wantCalls, tt.auths[i].calls) + } + assert.NotContains(t, rec.Body.String(), "super-secret") + assert.NotContains(t, entry.Data.ErrorMessage, "super-secret") + if tt.wantExtensionFailure { + assert.Equal(t, "authentication failed", entry.Data.ErrorMessage) + assert.Equal(t, "extension_authentication_failed", entry.Data.ErrorCode) + } + if tt.adminGate { + assert.Equal(t, auditlog.AuthMethodExtension, entry.AuthMethod) + } + }) + } +} + +func TestAuthMiddlewareWithOnlyNilRequestAuthenticatorsStaysDisabled(t *testing.T) { + var typedNil *mockRequestAuthenticator + tests := []struct { + name string + auths []ext.RequestAuthenticator + }{ + {name: "nil interface", auths: []ext.RequestAuthenticator{nil}}, + {name: "typed nil pointer", auths: []ext.RequestAuthenticator{typedNil}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + handler := AuthMiddlewareWithRequestAuthenticators("", nil, tt.auths, nil)(func(c *echo.Context) error { + return c.NoContent(http.StatusNoContent) + }) + e := echo.New() + rec := httptest.NewRecorder() + require.NoError(t, handler(e.NewContext(httptest.NewRequest(http.MethodGet, "/", nil), rec))) + assert.Equal(t, http.StatusNoContent, rec.Code) + }) + } +} + +func TestAuthMiddlewareExplicitBearerPrecedesRequestAuthenticator(t *testing.T) { + requestAuth := &mockRequestAuthenticator{result: &ext.Authentication{ + PrincipalID: "oidc:principal-1", UserPath: "/users/sso", DashboardAccess: true, + }} + handler := AuthMiddlewareWithRequestAuthenticators( + "master", nil, []ext.RequestAuthenticator{requestAuth}, nil, + )(func(c *echo.Context) error { + assert.Empty(t, core.UserPathFromContext(c.Request().Context())) + _, inherited := ext.AuthenticationFromContext(c.Request().Context()) + assert.False(t, inherited) + return c.NoContent(http.StatusNoContent) + }) + + e := echo.New() + req := httptest.NewRequest(http.MethodGet, "/admin/usage", nil) + req.Header.Set("Authorization", "Bearer master") + ctx := ext.WithAuthentication(req.Context(), ext.Authentication{ + PrincipalID: "oidc:ambient", UserPath: "/users/sso", Labels: []string{"sso"}, + }) + ctx = core.WithEffectiveUserPath(ctx, "/users/sso") + req = req.WithContext(ctx) + rec := httptest.NewRecorder() + rec.Header().Set(ext.AuthenticationUserHeader, "/users/sso") + require.NoError(t, handler(e.NewContext(req, rec))) + assert.Equal(t, http.StatusNoContent, rec.Code) + assert.Empty(t, rec.Header().Get(ext.AuthenticationUserHeader)) + assert.Zero(t, requestAuth.calls) +} + func TestAuthMiddleware_InteractionContinuationAccess(t *testing.T) { tests := []struct { name string @@ -392,6 +575,7 @@ func TestAuthMiddlewareWithAuthenticator_ManagedKeyUserPathOverridesHeader(t *te err := handler(c) require.NoError(t, err) assert.Equal(t, http.StatusOK, rec.Code) + assert.Equal(t, "/team/auth-key", rec.Header().Get(ext.AuthenticationUserHeader)) } func TestAuthMiddlewareWithAuthenticator_ManagedKeyUserPathUsesConfiguredHeader(t *testing.T) { diff --git a/internal/server/http.go b/internal/server/http.go index f9e37386e..171f54c57 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -113,6 +113,7 @@ type Config struct { ExtraMiddleware []echo.MiddlewareFunc // Optional: extension middleware registered after audit, before gateway auth ExtraRoutes []func(*echo.Echo) // Optional: extension route registration callbacks invoked after core routes ExtraAuthSkipPaths []string // Optional: extension paths appended to the auth skip list ("/*" suffix matches a prefix) + RequestAuthenticators []ext.RequestAuthenticator // Optional extension-provided request authentication mechanisms Tagging *tagging.Service // Optional: request labelling based on configured tagging headers SessionDetector *session.Detector // Optional: client session identification for sticky routing and audit grouping } @@ -243,7 +244,7 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { } // When no bootstrap master key is configured, keep admin APIs reachable so // the dashboard can recover managed-key access instead of locking itself out. - if cfg != nil && cfg.MasterKey == "" && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { + if cfg != nil && cfg.MasterKey == "" && !hasRequestAuthenticators(cfg.RequestAuthenticators) && cfg.AdminEndpointsEnabled && cfg.AdminHandler != nil { authSkipPaths = append(authSkipPaths, "/admin/*") } if cfg != nil && cfg.SwaggerEnabled && SwaggerAvailable() { @@ -257,6 +258,9 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { } // Global middleware stack (order matters) + // Scrub credential-like query values before the outer request logger + // snapshots RequestURI. URL.RawQuery remains intact for handlers. + e.Use(redactSensitiveRequestURI()) // Request logger with optional filtering for model-only interactions if cfg != nil && cfg.LogOnlyModelInteractions { e.Use(middleware.RequestLoggerWithConfig(middleware.RequestLoggerConfig{ @@ -349,9 +353,9 @@ func New(provider core.RoutableProvider, cfg *Config) *Server { // Authentication (skips public paths) // Register by authenticator presence; its Enabled state can change at runtime. - authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil) + authMiddlewareRegistered := cfg != nil && (cfg.MasterKey != "" || cfg.Authenticator != nil || hasRequestAuthenticators(cfg.RequestAuthenticators)) if authMiddlewareRegistered { - e.Use(AuthMiddlewareWithAuthenticator(cfg.MasterKey, cfg.Authenticator, authSkipPaths, userPathHeaderName)) + e.Use(AuthMiddlewareWithRequestAuthenticators(cfg.MasterKey, cfg.Authenticator, cfg.RequestAuthenticators, authSkipPaths, userPathHeaderName)) } // Session identification runs after auth so session ids are scoped by the diff --git a/internal/server/request_log.go b/internal/server/request_log.go new file mode 100644 index 000000000..6cf7f077b --- /dev/null +++ b/internal/server/request_log.go @@ -0,0 +1,20 @@ +package server + +import ( + "github.com/enterpilot/gomodel/internal/core" + "github.com/labstack/echo/v5" +) + +// redactSensitiveRequestURI keeps query parameters available to handlers while +// preventing the outer request logger from persisting OAuth credentials and +// transaction secrets. It applies generically so extensions do not need to +// expose provider-specific callback paths to Core. +func redactSensitiveRequestURI() echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c *echo.Context) error { + request := c.Request() + request.RequestURI = core.RedactSensitiveURLQuery(request.RequestURI) + return next(c) + } + } +} diff --git a/internal/server/request_log_test.go b/internal/server/request_log_test.go new file mode 100644 index 000000000..e56fabdf7 --- /dev/null +++ b/internal/server/request_log_test.go @@ -0,0 +1,42 @@ +package server + +import ( + "net/http" + "net/http/httptest" + "testing" + + "github.com/labstack/echo/v5" +) + +func TestRedactSensitiveRequestURI(t *testing.T) { + tests := []struct { + name string + uri string + want string + }{ + {name: "oauth callback", uri: "/sso/callback?code=secret-code&state=secret-state&error_description=provider-detail", want: "/sso/callback?code=REDACTED&error_description=REDACTED&state=REDACTED"}, + {name: "case insensitive", uri: "/callback?ID_TOKEN=secret", want: "/callback?ID_TOKEN=REDACTED"}, + {name: "ordinary query", uri: "/admin/usage?days=30&interval=daily", want: "/admin/usage?days=30&interval=daily"}, + {name: "malformed sensitive query", uri: "/callback?code=secret;broken", want: "/callback"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + e := echo.New() + e.Use(redactSensitiveRequestURI()) + e.GET("/*", func(c *echo.Context) error { + if tt.name == "oauth callback" && c.QueryParam("code") != "secret-code" { + t.Fatalf("handler lost original query value") + } + if got := c.Request().RequestURI; got != tt.want { + t.Fatalf("RequestURI = %q, want %q", got, tt.want) + } + return c.NoContent(http.StatusNoContent) + }) + rec := httptest.NewRecorder() + e.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, tt.uri, nil)) + if rec.Code != http.StatusNoContent { + t.Fatalf("status = %d", rec.Code) + } + }) + } +} diff --git a/run/run.go b/run/run.go index 69da7ca3f..5f5b8ef1e 100644 --- a/run/run.go +++ b/run/run.go @@ -57,6 +57,12 @@ type Options struct { // config loading. Register extensions here so operator tooling modes // stay silent. A returned error aborts startup. Setup func(ctx context.Context) error + // SetupConfig runs once after the initial configuration has been loaded and + // before the application is constructed. It lets custom distributions + // decode their opaque extensions: configuration and register corresponding + // extensions. Configuration registered here is startup-only; reloads reuse + // the resulting extension instances. + SetupConfig func(ctx context.Context, result *config.LoadResult) error } func (o Options) withDefaults() Options { @@ -182,6 +188,8 @@ func Run(ctx context.Context, opts Options) error { } } + setupConfigDone := false + // build produces one generation of the gateway from the configuration as it // stands right now. It is called again for every reload, which is what lets // a reload re-read every configuration value rather than a hand-picked @@ -192,6 +200,12 @@ func Run(ctx context.Context, opts Options) error { if err != nil { return nil, nil, fmt.Errorf("failed to load config: %w", err) } + if !setupConfigDone && opts.SetupConfig != nil { + if err := opts.SetupConfig(ctx, result); err != nil { + return nil, nil, fmt.Errorf("failed to set up configured extensions: %w", err) + } + setupConfigDone = true + } opts.ConfigureSwaggerDocs(result.Config.Server.BasePath) application, err := app.New(ctx, app.Config{ diff --git a/run/run_test.go b/run/run_test.go index d0ce80a94..97d77f74b 100644 --- a/run/run_test.go +++ b/run/run_test.go @@ -2,16 +2,20 @@ package run import ( "context" + "errors" "io" "net" "net/http" "strconv" "strings" "testing" + + "github.com/enterpilot/gomodel/config" ) func TestRunVersionSkipsSetup(t *testing.T) { setupCalled := false + setupConfigCalled := false var stdout strings.Builder err := Run(context.Background(), Options{ @@ -23,6 +27,10 @@ func TestRunVersionSkipsSetup(t *testing.T) { setupCalled = true return nil }, + SetupConfig: func(context.Context, *config.LoadResult) error { + setupConfigCalled = true + return nil + }, }) if err != nil { t.Fatalf("Run(--version) error = %v", err) @@ -30,11 +38,38 @@ func TestRunVersionSkipsSetup(t *testing.T) { if setupCalled { t.Error("Setup must not run for --version") } + if setupConfigCalled { + t.Error("SetupConfig must not run for --version") + } if !strings.HasPrefix(stdout.String(), "gomodel-test ") { t.Errorf("version output = %q, want prefix %q", stdout.String(), "gomodel-test ") } } +func TestRunSetupConfigReceivesLoadedConfiguration(t *testing.T) { + t.Chdir(t.TempDir()) + wantErr := errors.New("configured extension stopped startup") + called := false + err := Run(t.Context(), Options{ + Args: []string{}, + Stdout: io.Discard, + Stderr: io.Discard, + SetupConfig: func(_ context.Context, result *config.LoadResult) error { + called = true + if result == nil || result.Config == nil { + t.Fatal("SetupConfig received nil configuration") + } + return wantErr + }, + }) + if !called { + t.Fatal("SetupConfig was not called") + } + if !errors.Is(err, wantErr) { + t.Fatalf("Run error = %v, want wrapped sentinel", err) + } +} + func TestRunUsageErrorExitCode(t *testing.T) { err := Run(context.Background(), Options{ Args: []string{"--not-a-flag"}, diff --git a/web/dashboard/src/lib/api/client.js b/web/dashboard/src/lib/api/client.js index 5f6be9298..593a40839 100644 --- a/web/dashboard/src/lib/api/client.js +++ b/web/dashboard/src/lib/api/client.js @@ -31,11 +31,14 @@ export function apiFetch(path, options = {}) { async function request(path, options, { label = path, parse = true } = {}) { const generation = auth.generation; const res = await apiFetch(path, options); + const stale = generation < auth.generation; + if (!stale) { + auth.observeResponse(res); + } if (res.status === 401) { auth.handleUnauthorized(generation); - return { ok: false, stale: generation < auth.generation, status: 401, data: null, res }; + return { ok: false, stale, status: 401, data: null, res }; } - const stale = generation < auth.generation; if (!res.ok) { let data = null; try { diff --git a/web/dashboard/src/lib/components/organisms/AuthDialog.svelte b/web/dashboard/src/lib/components/organisms/AuthDialog.svelte index d9a407da1..8bb58f37a 100644 --- a/web/dashboard/src/lib/components/organisms/AuthDialog.svelte +++ b/web/dashboard/src/lib/components/organisms/AuthDialog.svelte @@ -3,7 +3,9 @@ import Modal from "$lib/components/atoms/Modal.svelte"; import Icon from "$lib/components/atoms/Icon.svelte"; import { auth } from "$lib/stores/auth.svelte.js"; - import { Check, LockKeyhole } from "lucide"; + import { authenticationLoginURL } from "$lib/stores/external-auth.js"; + import { gomodelPath } from "$lib/api/paths.js"; + import { Check, KeyRound, LockKeyhole } from "lucide"; + {#if auth.externalLoginURL} + +
            or use an API key
            + {/if}