diff --git a/README.md b/README.md index d4f11f7..1f71360 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,8 @@ Sticky sessions default to 3 probes per sample and pool sessions to 8. The defau The list and detail views are backed by PostgreSQL and remain useful if ClickHouse reporting is unavailable. Reports, grouped samples, and CSV depend on ClickHouse. Export a session with `GET /api/sessions/{id}/export.csv`, stop it with `POST /api/sessions/{id}/stop`, and delete it with `DELETE /api/sessions/{id}`. Deleting a running session stops its worker first. Deletion then crosses the writer queue barrier, removes ClickHouse events, and finally removes the PostgreSQL session and its IP inventory. +Rename a session with `PATCH /api/sessions/{id}` and a run with `PATCH /api/runs/{id}`, sending the properties to change (`{"name": "..."}`). Renaming never touches sampling state, so it is valid in any status. A run's variant sessions are named ` (axis=value)` when the run is created; renaming the run rewrites the variants that still carry a generated name and leaves any variant you renamed yourself untouched. Which is which is recorded per session when you rename it, not inferred from the name's text, so a variant you named by hand keeps that name even if it happens to match what a later run name would generate. + On SIGINT or SIGTERM, the HTTP server stops accepting work, active samplers are cancelled and awaited, and the ClickHouse writer drains its accepted queue before connections close. Shutdown does not change active session rows from `running`; starting the service with the same databases and encryption key resumes them from their persisted sample counters, so sequence numbers continue rather than restarting. `GET /healthz` is process liveness. `GET /readyz` checks both PostgreSQL and ClickHouse and returns HTTP 503 with per-dependency status when either is unavailable. The container intentionally has no baked-in healthcheck so the target orchestrator can set its own intervals and failure policy against these endpoints. diff --git a/api/openapi.yaml b/api/openapi.yaml index 97a277a..c58b129 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -51,6 +51,25 @@ paths: '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalError'} '503': {$ref: '#/components/responses/DependencyUnavailable'} + patch: + operationId: editSession + description: Edits the mutable properties of a session. + requestBody: + required: true + content: + application/json: + schema: {$ref: '#/components/schemas/EditSessionRequest'} + responses: + '200': + description: Session updated + content: + application/json: + schema: + $ref: '#/components/schemas/Session' + '400': {$ref: '#/components/responses/BadRequest'} + '404': {$ref: '#/components/responses/NotFound'} + '500': {$ref: '#/components/responses/InternalError'} + '503': {$ref: '#/components/responses/DependencyUnavailable'} delete: operationId: deleteSession responses: @@ -209,6 +228,27 @@ paths: '404': {$ref: '#/components/responses/NotFound'} '500': {$ref: '#/components/responses/InternalError'} '503': {$ref: '#/components/responses/DependencyUnavailable'} + patch: + operationId: editRun + description: >- + Edits the mutable properties of a run. Renaming a run also renames the + child sessions that still carry their generated name, leaving any + variant renamed by hand untouched. + requestBody: + required: true + content: + application/json: + schema: {$ref: '#/components/schemas/EditRunRequest'} + responses: + '200': + description: Run updated + content: + application/json: + schema: {$ref: '#/components/schemas/Run'} + '400': {$ref: '#/components/responses/BadRequest'} + '404': {$ref: '#/components/responses/NotFound'} + '500': {$ref: '#/components/responses/InternalError'} + '503': {$ref: '#/components/responses/DependencyUnavailable'} delete: operationId: deleteRun responses: @@ -373,6 +413,15 @@ components: max_samples: {type: integer, minimum: 1, maximum: 2147483647, nullable: true} max_duration_seconds: {type: integer, minimum: 1, maximum: 2147483647, nullable: true} target_country: {type: string, pattern: '^([A-Za-z]{2})?$', nullable: true} + EditSessionRequest: + type: object + additionalProperties: false + description: >- + Mutable session properties. Every property is optional so the payload + can grow to cover further editable fields; a request that sets none of + them is rejected. + properties: + name: {type: string, minLength: 1, maxLength: 100} Session: type: object required: [id, name, proxy_display, mode, status, cadence_seconds, probes_per_sample, @@ -612,6 +661,15 @@ components: required: [max_variants_per_run] properties: max_variants_per_run: {type: integer, minimum: 1} + EditRunRequest: + type: object + additionalProperties: false + description: >- + Mutable run properties. Every property is optional so the payload can + grow to cover further editable fields; a request that sets none of them + is rejected. + properties: + name: {type: string, minLength: 1, maxLength: 100} Run: type: object required: [id, name, template_display, status, variant_count, distinct_ips, created_at] diff --git a/internal/api/edit.go b/internal/api/edit.go new file mode 100644 index 0000000..f6bc80a --- /dev/null +++ b/internal/api/edit.go @@ -0,0 +1,85 @@ +package api + +import ( + "context" + "errors" + "strings" + "unicode/utf8" + + "github.com/timo972/proxy-sampler/internal/api/openapi" + "github.com/timo972/proxy-sampler/internal/session" + "github.com/timo972/proxy-sampler/internal/variation" +) + +// EditSession applies the mutable properties of a session. Only the display +// name is editable today; the request shape carries every property as optional +// so further fields can join it without breaking existing clients. +func (s *Server) EditSession(ctx context.Context, request openapi.EditSessionRequestObject) (openapi.EditSessionResponseObject, error) { + if request.Body == nil { + return nil, invalidRequest() + } + name, err := editedName(request.Body.Name) + if err != nil { + return nil, err + } + + if err := s.store.Rename(ctx, request.Id, name); err != nil { + if errors.Is(err, session.ErrNotFound) { + return nil, notFound() + } + return nil, internalError() + } + value, err := s.store.SessionByID(ctx, request.Id) + if err != nil { + if errors.Is(err, session.ErrNotFound) { + return nil, notFound() + } + return nil, internalError() + } + return openapi.EditSession200JSONResponse(mapSession(value)), nil +} + +// EditRun applies the mutable properties of a run. Renaming a run also renames +// the child sessions that still carry their generated name, so a run and its +// variants stay consistent while any variant renamed by hand is preserved. +func (s *Server) EditRun(ctx context.Context, request openapi.EditRunRequestObject) (openapi.EditRunResponseObject, error) { + if s.runStore == nil { + return nil, internalError() + } + if request.Body == nil { + return nil, invalidRequest() + } + name, err := editedName(request.Body.Name) + if err != nil { + return nil, err + } + + if err := s.runStore.RenameRun(ctx, request.Id, name); err != nil { + if errors.Is(err, variation.ErrRunNotFound) { + return nil, notFound() + } + return nil, internalError() + } + summary, err := s.runStore.RunByID(ctx, request.Id) + if err != nil { + if errors.Is(err, variation.ErrRunNotFound) { + return nil, notFound() + } + return nil, internalError() + } + return openapi.EditRun200JSONResponse(mapRun(summary)), nil +} + +// editedName validates the one property an edit request can currently set. A +// nil pointer means the client sent no editable property at all, which is a +// bad request rather than a silent no-op. +func editedName(raw *string) (string, error) { + if raw == nil { + return "", invalidRequest() + } + name := strings.TrimSpace(*raw) + if name == "" || utf8.RuneCountInString(name) > 100 { + return "", invalidRequest() + } + return name, nil +} diff --git a/internal/api/edit_test.go b/internal/api/edit_test.go new file mode 100644 index 0000000..0358cf3 --- /dev/null +++ b/internal/api/edit_test.go @@ -0,0 +1,333 @@ +package api + +import ( + "encoding/json" + "net/http" + "strings" + "testing" + + "github.com/google/uuid" + + "github.com/timo972/proxy-sampler/internal/session" + "github.com/timo972/proxy-sampler/internal/variation" +) + +func TestEditSessionUpdatesName(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), `{"name":"Frankfurt residential"}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + var body struct { + Name string `json:"name"` + } + decodeJSON(t, response, &body) + if body.Name != "Frankfurt residential" { + t.Errorf("response name = %q, want the new name", body.Name) + } + if store.sessions[0].Name != "Frankfurt residential" { + t.Errorf("stored name = %q, want the new name", store.sessions[0].Name) + } +} + +func TestEditSessionTrimsSurroundingWhitespace(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), `{"name":" Padded name "}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + if store.sessions[0].Name != "Padded name" { + t.Errorf("stored name = %q, want the trimmed name", store.sessions[0].Name) + } +} + +func TestEditSessionRejectsInvalidNames(t *testing.T) { + tests := []struct { + name string + body string + }{ + {"empty", `{"name":""}`}, + {"whitespace only", `{"name":" "}`}, + {"over 100 runes", `{"name":"` + strings.Repeat("a", 101) + `"}`}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), tt.body) + assertAPIError(t, response, http.StatusBadRequest, "invalid_request") + if store.sessions[0].Name != "Existing" { + t.Errorf("stored name = %q, want it unchanged", store.sessions[0].Name) + } + }) + } +} + +// TestEditSessionAcceptsExactly100Runes guards the boundary with multi-byte +// runes, so the limit stays a rune count rather than a byte length. +func TestEditSessionAcceptsExactly100Runes(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + name := strings.Repeat("ü", 100) + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), `{"name":"`+name+`"}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + if store.sessions[0].Name != name { + t.Errorf("stored name = %q, want the 100-rune name", store.sessions[0].Name) + } +} + +// TestEditSessionRejectsEmptyPayload covers the extensible request shape: every +// property is optional, so a payload that sets nothing has to be refused rather +// than silently succeeding as a no-op. +func TestEditSessionRejectsEmptyPayload(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), `{}`) + assertAPIError(t, response, http.StatusBadRequest, "invalid_request") + if store.sessions[0].Name != "Existing" { + t.Errorf("stored name = %q, want it unchanged", store.sessions[0].Name) + } +} + +func TestEditSessionNotFound(t *testing.T) { + store := newMemoryStore() + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+uuid.New().String(), `{"name":"Anything"}`) + assertAPIError(t, response, http.StatusNotFound, "not_found") +} + +func TestEditRunUpdatesName(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}, map[string]string{"region": "us"}) + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), `{"name":"Beta"}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + var body struct { + Name string `json:"name"` + } + decodeJSON(t, response, &body) + if body.Name != "Beta" { + t.Errorf("response name = %q, want the new name", body.Name) + } + if runStore.runs[0].Name != "Beta" { + t.Errorf("stored run name = %q, want the new name", runStore.runs[0].Name) + } +} + +// TestEditRunRenamesOnlyGeneratedVariantNames is the cascade rule: a generated +// child follows the rename, and a child renamed by hand keeps the name its user +// chose. Which is which comes from recorded provenance, not from the name's text. +func TestEditRunRenamesOnlyGeneratedVariantNames(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}, map[string]string{"region": "us"}) + children := runStore.children[run] + children[1].Session.Name = "My custom probe" + runStore.customized[children[1].Session.ID] = true + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), `{"name":"Beta"}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + updated := runStore.children[run] + if updated[0].Session.Name != "Beta (region=eu)" { + t.Errorf("generated variant name = %q, want it to follow the run rename", updated[0].Session.Name) + } + if updated[1].Session.Name != "My custom probe" { + t.Errorf("hand-renamed variant = %q, want it preserved", updated[1].Session.Name) + } +} + +func TestEditRunRejectsInvalidNames(t *testing.T) { + tests := []struct { + name string + body string + }{ + {"empty", `{"name":""}`}, + {"whitespace only", `{"name":" "}`}, + {"over 100 runes", `{"name":"` + strings.Repeat("a", 101) + `"}`}, + {"no editable property", `{}`}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}) + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), tt.body) + assertAPIError(t, response, http.StatusBadRequest, "invalid_request") + if runStore.runs[0].Name != "Alpha" { + t.Errorf("stored run name = %q, want it unchanged", runStore.runs[0].Name) + } + }) + } +} + +func TestEditRunTrimsSurroundingWhitespace(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}) + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), `{"name":" Beta "}`) + if response.Code != http.StatusOK { + t.Fatalf("status = %d, want 200; body=%s", response.Code, response.Body.String()) + } + if runStore.runs[0].Name != "Beta" { + t.Errorf("stored run name = %q, want the trimmed name", runStore.runs[0].Name) + } + if got := runStore.children[run][0].Session.Name; got != "Beta (region=eu)" { + t.Errorf("variant name = %q, want it derived from the trimmed name", got) + } +} + +func TestEditRunNotFound(t *testing.T) { + handler := testRunHandler(t, newMemoryStore(), newMemoryRunStore(), &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+uuid.New().String(), `{"name":"Beta"}`) + assertAPIError(t, response, http.StatusNotFound, "not_found") +} + +// seedRun adds a run whose children carry the names CreateRun would have +// generated for the given params, so rename tests start from a realistic state. +func seedRun(store *memoryRunStore, name string, params ...map[string]string) uuid.UUID { + id := uuid.New() + store.runs = append(store.runs, variation.Run{ID: id, Name: name}) + children := make([]variation.ChildSession, 0, len(params)) + for _, p := range params { + raw, err := json.Marshal(p) + if err != nil { + panic(err) + } + children = append(children, variation.ChildSession{ + Session: session.Session{ID: uuid.New(), Name: variation.VariantName(name, p)}, + Params: raw, + }) + } + store.children[id] = children + return id +} + +// TestEditRejectsOversizedBody covers the body cap on both edit routes: the +// request is refused during the read, before the generated decoder buffers it. +func TestEditRejectsOversizedBody(t *testing.T) { + const bodyLimit = 1 << 20 + // The payload itself is valid and would rename successfully: a short name + // followed by trailing whitespace, which JSON permits. Only the body cap can + // reject it, so a 400 here cannot come from name-length validation instead. + oversized := `{"name":"Beta"}` + strings.Repeat(" ", bodyLimit) + + t.Run("session", func(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), oversized) + if response.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want 400", response.Code) + } + if store.sessions[0].Name != "Existing" { + t.Errorf("stored name = %q, want it unchanged", store.sessions[0].Name) + } + }) + + t.Run("run", func(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}) + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), oversized) + if response.Code != http.StatusBadRequest { + t.Fatalf("status = %d, want 400", response.Code) + } + if runStore.runs[0].Name != "Alpha" { + t.Errorf("stored run name = %q, want it unchanged", runStore.runs[0].Name) + } + }) +} + +// TestEditSessionRejectsRuntimeSchemaViolations mirrors the create endpoints: +// the generated decoder silently drops unknown fields and trailing data despite +// additionalProperties:false, so the edit payload is validated explicitly. +func TestEditSessionRejectsRuntimeSchemaViolations(t *testing.T) { + tests := []struct { + name string + body string + }{ + {name: "unknown property", body: `{"name":"Beta","unexpected":true}`}, + {name: "typoed property", body: `{"name":"Beta","nmae":"ignored"}`}, + {name: "null name", body: `{"name":null}`}, + {name: "trailing JSON", body: `{"name":"Beta"} {}`}, + {name: "concatenated objects", body: `{"name":"Beta"}{"name":"Gamma"}`}, + {name: "JSON array", body: `[{"name":"Beta"}]`}, + {name: "JSON null", body: `null`}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + store := newMemoryStore() + s := sampleSession() + store.sessions = append(store.sessions, s) + handler := testHandler(t, store, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/sessions/"+s.ID.String(), tt.body) + assertAPIError(t, response, http.StatusBadRequest, "invalid_request") + if store.sessions[0].Name != "Existing" { + t.Errorf("stored name = %q, want it unchanged", store.sessions[0].Name) + } + }) + } +} + +func TestEditRunRejectsRuntimeSchemaViolations(t *testing.T) { + tests := []struct { + name string + body string + }{ + {name: "unknown property", body: `{"name":"Beta","unexpected":true}`}, + {name: "typoed property", body: `{"name":"Beta","nmae":"ignored"}`}, + {name: "null name", body: `{"name":null}`}, + {name: "trailing JSON", body: `{"name":"Beta"} {}`}, + {name: "concatenated objects", body: `{"name":"Beta"}{"name":"Gamma"}`}, + {name: "JSON array", body: `[{"name":"Beta"}]`}, + {name: "JSON null", body: `null`}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + runStore := newMemoryRunStore() + run := seedRun(runStore, "Alpha", map[string]string{"region": "eu"}) + handler := testRunHandler(t, newMemoryStore(), runStore, &fakeControl{}) + + response := request(t, handler, http.MethodPatch, "/api/runs/"+run.String(), tt.body) + assertAPIError(t, response, http.StatusBadRequest, "invalid_request") + if runStore.runs[0].Name != "Alpha" { + t.Errorf("stored run name = %q, want it unchanged", runStore.runs[0].Name) + } + if got := runStore.children[run][0].Session.Name; got != "Alpha (region=eu)" { + t.Errorf("variant name = %q, want it unchanged", got) + } + }) + } +} diff --git a/internal/api/openapi/openapi.gen.go b/internal/api/openapi/openapi.gen.go index ccdbdc7..f84bcc2 100644 --- a/internal/api/openapi/openapi.gen.go +++ b/internal/api/openapi/openapi.gen.go @@ -236,6 +236,16 @@ type CreateSessionRequest struct { // CreateSessionRequestMode defines model for CreateSessionRequest.Mode. type CreateSessionRequestMode string +// EditRunRequest Mutable run properties. Every property is optional so the payload can grow to cover further editable fields; a request that sets none of them is rejected. +type EditRunRequest struct { + Name *string `json:"name,omitempty"` +} + +// EditSessionRequest Mutable session properties. Every property is optional so the payload can grow to cover further editable fields; a request that sets none of them is rejected. +type EditSessionRequest struct { + Name *string `json:"name,omitempty"` +} + // Error defines model for Error. type Error struct { Code string `json:"code"` @@ -526,9 +536,15 @@ type SessionSamplesParams struct { // CreateRunJSONRequestBody defines body for CreateRun for application/json ContentType. type CreateRunJSONRequestBody = CreateRunRequest +// EditRunJSONRequestBody defines body for EditRun for application/json ContentType. +type EditRunJSONRequestBody = EditRunRequest + // CreateSessionJSONRequestBody defines body for CreateSession for application/json ContentType. type CreateSessionJSONRequestBody = CreateSessionRequest +// EditSessionJSONRequestBody defines body for EditSession for application/json ContentType. +type EditSessionJSONRequestBody = EditSessionRequest + // ServerInterface represents all server handlers. type ServerInterface interface { @@ -547,6 +563,9 @@ type ServerInterface interface { // (GET /api/runs/{id}) RunByID(w http.ResponseWriter, r *http.Request, id RunID) + // (PATCH /api/runs/{id}) + EditRun(w http.ResponseWriter, r *http.Request, id RunID) + // (GET /api/runs/{id}/export.csv) ExportRunCSV(w http.ResponseWriter, r *http.Request, id RunID) @@ -571,6 +590,9 @@ type ServerInterface interface { // (GET /api/sessions/{id}) SessionByID(w http.ResponseWriter, r *http.Request, id SessionID) + // (PATCH /api/sessions/{id}) + EditSession(w http.ResponseWriter, r *http.Request, id SessionID) + // (GET /api/sessions/{id}/export.csv) ExportSessionCSV(w http.ResponseWriter, r *http.Request, id SessionID, params ExportSessionCSVParams) @@ -622,6 +644,11 @@ func (_ Unimplemented) RunByID(w http.ResponseWriter, r *http.Request, id RunID) w.WriteHeader(http.StatusNotImplemented) } +// (PATCH /api/runs/{id}) +func (_ Unimplemented) EditRun(w http.ResponseWriter, r *http.Request, id RunID) { + w.WriteHeader(http.StatusNotImplemented) +} + // (GET /api/runs/{id}/export.csv) func (_ Unimplemented) ExportRunCSV(w http.ResponseWriter, r *http.Request, id RunID) { w.WriteHeader(http.StatusNotImplemented) @@ -662,6 +689,11 @@ func (_ Unimplemented) SessionByID(w http.ResponseWriter, r *http.Request, id Se w.WriteHeader(http.StatusNotImplemented) } +// (PATCH /api/sessions/{id}) +func (_ Unimplemented) EditSession(w http.ResponseWriter, r *http.Request, id SessionID) { + w.WriteHeader(http.StatusNotImplemented) +} + // (GET /api/sessions/{id}/export.csv) func (_ Unimplemented) ExportSessionCSV(w http.ResponseWriter, r *http.Request, id SessionID, params ExportSessionCSVParams) { w.WriteHeader(http.StatusNotImplemented) @@ -800,6 +832,32 @@ func (siw *ServerInterfaceWrapper) RunByID(w http.ResponseWriter, r *http.Reques handler.ServeHTTP(w, r) } +// EditRun operation middleware +func (siw *ServerInterfaceWrapper) EditRun(w http.ResponseWriter, r *http.Request) { + + var err error + _ = err + + // ------------- Path parameter "id" ------------- + var id RunID + + err = runtime.BindStyledParameterWithOptions("simple", "id", chi.URLParam(r, "id"), &id, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) + if err != nil { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "id", Err: err}) + return + } + + handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + siw.Handler.EditRun(w, r, id) + })) + + for _, middleware := range siw.HandlerMiddlewares { + handler = middleware(handler) + } + + handler.ServeHTTP(w, r) +} + // ExportRunCSV operation middleware func (siw *ServerInterfaceWrapper) ExportRunCSV(w http.ResponseWriter, r *http.Request) { @@ -984,6 +1042,32 @@ func (siw *ServerInterfaceWrapper) SessionByID(w http.ResponseWriter, r *http.Re handler.ServeHTTP(w, r) } +// EditSession operation middleware +func (siw *ServerInterfaceWrapper) EditSession(w http.ResponseWriter, r *http.Request) { + + var err error + _ = err + + // ------------- Path parameter "id" ------------- + var id SessionID + + err = runtime.BindStyledParameterWithOptions("simple", "id", chi.URLParam(r, "id"), &id, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true, Type: "string", Format: "uuid"}) + if err != nil { + siw.ErrorHandlerFunc(w, r, &InvalidParamFormatError{ParamName: "id", Err: err}) + return + } + + handler := http.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + siw.Handler.EditSession(w, r, id) + })) + + for _, middleware := range siw.HandlerMiddlewares { + handler = middleware(handler) + } + + handler.ServeHTTP(w, r) +} + // ExportSessionCSV operation middleware func (siw *ServerInterfaceWrapper) ExportSessionCSV(w http.ResponseWriter, r *http.Request) { @@ -1370,6 +1454,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/runs/{id}", wrapper.RunByID) }) + r.Group(func(r chi.Router) { + r.Patch(options.BaseURL+"/api/runs/{id}", wrapper.EditRun) + }) r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/runs/{id}/export.csv", wrapper.ExportRunCSV) }) @@ -1394,6 +1481,9 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/sessions/{id}", wrapper.SessionByID) }) + r.Group(func(r chi.Router) { + r.Patch(options.BaseURL+"/api/sessions/{id}", wrapper.EditSession) + }) r.Group(func(r chi.Router) { r.Get(options.BaseURL+"/api/sessions/{id}/export.csv", wrapper.ExportSessionCSV) }) @@ -1735,6 +1825,87 @@ func (response RunByID503JSONResponse) VisitRunByIDResponse(w http.ResponseWrite return err } +type EditRunRequestObject struct { + Id RunID `json:"id"` + Body *EditRunJSONRequestBody +} + +type EditRunResponseObject interface { + VisitEditRunResponse(w http.ResponseWriter) error +} + +type EditRun200JSONResponse Run + +func (response EditRun200JSONResponse) VisitEditRunResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + _, err := buf.WriteTo(w) + return err +} + +type EditRun400JSONResponse struct{ BadRequestJSONResponse } + +func (response EditRun400JSONResponse) VisitEditRunResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(400) + _, err := buf.WriteTo(w) + return err +} + +type EditRun404JSONResponse struct{ NotFoundJSONResponse } + +func (response EditRun404JSONResponse) VisitEditRunResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(404) + _, err := buf.WriteTo(w) + return err +} + +type EditRun500JSONResponse struct{ InternalErrorJSONResponse } + +func (response EditRun500JSONResponse) VisitEditRunResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(500) + _, err := buf.WriteTo(w) + return err +} + +type EditRun503JSONResponse struct { + DependencyUnavailableJSONResponse +} + +func (response EditRun503JSONResponse) VisitEditRunResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(503) + _, err := buf.WriteTo(w) + return err +} + type ExportRunCSVRequestObject struct { Id RunID `json:"id"` } @@ -2326,6 +2497,87 @@ func (response SessionByID503JSONResponse) VisitSessionByIDResponse(w http.Respo return err } +type EditSessionRequestObject struct { + Id SessionID `json:"id"` + Body *EditSessionJSONRequestBody +} + +type EditSessionResponseObject interface { + VisitEditSessionResponse(w http.ResponseWriter) error +} + +type EditSession200JSONResponse Session + +func (response EditSession200JSONResponse) VisitEditSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + _, err := buf.WriteTo(w) + return err +} + +type EditSession400JSONResponse struct{ BadRequestJSONResponse } + +func (response EditSession400JSONResponse) VisitEditSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(400) + _, err := buf.WriteTo(w) + return err +} + +type EditSession404JSONResponse struct{ NotFoundJSONResponse } + +func (response EditSession404JSONResponse) VisitEditSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(404) + _, err := buf.WriteTo(w) + return err +} + +type EditSession500JSONResponse struct{ InternalErrorJSONResponse } + +func (response EditSession500JSONResponse) VisitEditSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(500) + _, err := buf.WriteTo(w) + return err +} + +type EditSession503JSONResponse struct { + DependencyUnavailableJSONResponse +} + +func (response EditSession503JSONResponse) VisitEditSessionResponse(w http.ResponseWriter) error { + + var buf bytes.Buffer + if err := json.NewEncoder(&buf).Encode(response); err != nil { + return err + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(503) + _, err := buf.WriteTo(w) + return err +} + type ExportSessionCSVRequestObject struct { Id SessionID `json:"id"` Params ExportSessionCSVParams @@ -2867,6 +3119,9 @@ type StrictServerInterface interface { // (GET /api/runs/{id}) RunByID(ctx context.Context, request RunByIDRequestObject) (RunByIDResponseObject, error) + // (PATCH /api/runs/{id}) + EditRun(ctx context.Context, request EditRunRequestObject) (EditRunResponseObject, error) + // (GET /api/runs/{id}/export.csv) ExportRunCSV(ctx context.Context, request ExportRunCSVRequestObject) (ExportRunCSVResponseObject, error) @@ -2891,6 +3146,9 @@ type StrictServerInterface interface { // (GET /api/sessions/{id}) SessionByID(ctx context.Context, request SessionByIDRequestObject) (SessionByIDResponseObject, error) + // (PATCH /api/sessions/{id}) + EditSession(ctx context.Context, request EditSessionRequestObject) (EditSessionResponseObject, error) + // (GET /api/sessions/{id}/export.csv) ExportSessionCSV(ctx context.Context, request ExportSessionCSVRequestObject) (ExportSessionCSVResponseObject, error) @@ -3073,6 +3331,39 @@ func (sh *strictHandler) RunByID(w http.ResponseWriter, r *http.Request, id RunI } } +// EditRun operation middleware +func (sh *strictHandler) EditRun(w http.ResponseWriter, r *http.Request, id RunID) { + var request EditRunRequestObject + + request.Id = id + + var body EditRunJSONRequestBody + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return + } + request.Body = &body + + handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { + return sh.ssi.EditRun(ctx, request.(EditRunRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "EditRun") + } + + response, err := handler(r.Context(), w, r, request) + + if err != nil { + sh.options.ResponseErrorHandlerFunc(w, r, err) + } else if validResponse, ok := response.(EditRunResponseObject); ok { + if err := validResponse.VisitEditRunResponse(w); err != nil { + sh.options.ResponseErrorHandlerFunc(w, r, err) + } + } else if response != nil { + sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response)) + } +} + // ExportRunCSV operation middleware func (sh *strictHandler) ExportRunCSV(w http.ResponseWriter, r *http.Request, id RunID) { var request ExportRunCSVRequestObject @@ -3284,6 +3575,39 @@ func (sh *strictHandler) SessionByID(w http.ResponseWriter, r *http.Request, id } } +// EditSession operation middleware +func (sh *strictHandler) EditSession(w http.ResponseWriter, r *http.Request, id SessionID) { + var request EditSessionRequestObject + + request.Id = id + + var body EditSessionJSONRequestBody + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + sh.options.RequestErrorHandlerFunc(w, r, fmt.Errorf("can't decode JSON body: %w", err)) + return + } + request.Body = &body + + handler := func(ctx context.Context, w http.ResponseWriter, r *http.Request, request interface{}) (interface{}, error) { + return sh.ssi.EditSession(ctx, request.(EditSessionRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "EditSession") + } + + response, err := handler(r.Context(), w, r, request) + + if err != nil { + sh.options.ResponseErrorHandlerFunc(w, r, err) + } else if validResponse, ok := response.(EditSessionResponseObject); ok { + if err := validResponse.VisitEditSessionResponse(w); err != nil { + sh.options.ResponseErrorHandlerFunc(w, r, err) + } + } else if response != nil { + sh.options.ResponseErrorHandlerFunc(w, r, fmt.Errorf("unexpected response type: %T", response)) + } +} + // ExportSessionCSV operation middleware func (sh *strictHandler) ExportSessionCSV(w http.ResponseWriter, r *http.Request, id SessionID, params ExportSessionCSVParams) { var request ExportSessionCSVRequestObject @@ -3470,58 +3794,62 @@ func (sh *strictHandler) Readyz(w http.ResponseWriter, r *http.Request) { // const string: with thousands of chunks the chained `+` fold is several // times slower for the Go compiler than parsing a slice literal. var swaggerSpec = []string{ - "7Bxpc9y29a9w0HxoZyhpHctJs/3QsaWk0Uwm1UhpPtTjcrDk211EJEAD4Eprj/57Bwdv8NIedmzli6Ml", - "8N7Duw+CH1HIkpRRoFKg+UeUYo4TkMD1Xz9xlqh/CUVz9D4DvkU+ojgBNEdL9cxHIlxDgtWiJeMJlmiO", - "IizhRJIEkI/kNlWLheSErtDjo49uMnp1WQBNsVyXMEmEfMThfUY4RGgueQZODFmmV7aB34IQhB0QwW+s", - "ix+STefGoyJGpIwK0Px+g6MbeJ+BkOqvkFEJVP8vTtOYhFgSRs/+EIyq30pc33BYojn6y1kpyzPzVJz9", - "yDnjBlUEIuQkVUDQHF3RDY5J5HGL8NFHF4wuYxIeAfkNCJbxEDwhsQQvzBE/+ugSUqAR0HD7H4o3mMR4", - "EcPhKXrt5WrhRQUFHhFeVqHi0UdXVAKnODaAjiAlg84TwDfAPTALffQrkz+xjEZHlBVl0ltqnGqR3afA", - "vn4g4jaFUBMQRURtxPE1ZylwSZRqL3EswEdp5SdFdmaITgglSZag+YvCRAiVsAJ90qV1Qu0nd8ScH6ja", - "/BbFREhl35iuwPwbsQS9a9mdj2KgK7kexi2ZG/MGx5k5BJGQiMqiEof9AXOOt8iYeu533hrSS8rY4g8w", - "6n8BcXwDKeOaMw2GQRwHd7B1otMiFcQIrV/U14zFF5XlSuRESEJDGZBU1Ngyc7FlzSjjAccS6q6OZcpK", - "fJTgh4KpVUg0i605G89rIdMsWRjAOvyIbj3qZnPJQYn5CmSgtYtrXnWgLWFsMCeY2j1Dx29IshBKQX0T", - "XoO7dVE5dYADlnCT0UowmGBX+AF6WdinGoUpuzgbYuUVIRAQMhoZPckl/e2L8+/P//7yu/Pv/QGbigiO", - "AxUQWSYDI+wIljiLJZq/mM1mM38I6syplAl+CKKMa983icQO9WiAFjhJY9gbRBZB1XUJScI7rUOMxU6X", - "ZdIMjfwX6700IxJCi78d21LOFhAYm6inOJygrvUiSIHbE9cP/OrVkHiHzS/FUgU1NEf/++vb1yf/xScf", - "3n389vFv//zGRZCEJI2tp+k7q4/uOZHwbxpvDaKmoWoGVuD5xlCsLNra3W2ZNst8mnU+G9GzEQ0aUcrZ", - "w3a6xu/b+twWZIibZDdFtjwpPTTSbXE3ASHwyvWsGZoNgfl6F2E/A45NIlhHruqSTFSVi905NKqB0O5y", - "ImJx1EbjMrVCuQiV350jfyAXU6VKFGA5tuj0EUmdbK3Y5kQShMRcTiKiwTeSohqUyqlKuvw2t1yMvrq+", - "YfdtTmNB3WkzlrBivCunLsyo9SyiYhEHayInlQH5PlWqQFTZsGAsBqxz8SXhQgYCgI6X6YrDljIiIAhj", - "LNyUrEklw50o4g6dIcL9e4wnn4ATcReIkPG6s8zd81AN0ZWea9UqhFyK1NDua72oIW/zsiGzmuhr0qqe", - "u8pul5o2a7C2a8ASh6DK/+F6LGELEsPwOg6CREAlwfHw4ozeUXZPJ5ZDlpQ6Lr96mhJyF1/+xdm9XF8z", - "Qh1F8BRP16xqJyl942C4Vci5yL8BHBEKxgIb8Swm4d2aZQLcZp8yIVe8VuUWTxu0FEv9KlQ3PWkmtdO8", - "zZIEG1/WULRcm8fV/ssYr1YQTVucAg+h4Xgc3YKmrbf6A5JJHI9B3WBYua9+gDaFfoMfTqYScfcmC+/A", - "1aMZ00JQjmIBsTu7wQ/9DtBh/oRO29LgjiHGwDEEWD/pPj0zCrWbaS45S4KuTISofDLlsCEsEzvkRpK5", - "UbhMOyco39VJhpMnmYMdoS4Wp+Vm0/pwJBoxtSirnjajW1kuzyg1tYWQLE11uFsSSsQaImdFlZfTQURE", - "GmN3rrRLf00fqVG7F8iKIwz33EphdAjwgtElWbXFqOpWC9yUdDyjQ53jZlB0gegg4xIkJnGbDIu1r3mn", - "tLDkdj0v7dv3u9mQR4ih3rWipIKl4xx9TezxpFXa4Y5c+pg974lhEoQkida4lLE4EOQDfOax9WBNfXua", - "UfI21ZtD1AUXg5jdAw8W+fCrnUjpZH5NhGQrjpPRqCtR3YFfACcw/hy3erlJYR3QJM+oKkoi07irjtt+", - "W4MnjCV6RHgKdiYh8lR88rAXYuWVPVMUe2zpyTV4CRPS46DUwGMLAXyjI7T4h1fVcQ/TyHPopYc5eJqr", - "nuaqOC2DSFcG2vCuLm3vkln19HUTboluarJWiMm3bsYon8tD3WoG/rgBV43R9AwO81bptwj6GgSQ97wc", - "DZggXGO66moAULjvxpxyonQj6G1c5ItM9jM4/8qXK/Z3YWULCJqWPAi4ZcUaDLtztUwqDHBv41IK2+tu", - "7q3mfK69IsBSJQ/1nkvzfMJS5iicpQxUEO9Cqp9D1P+c0M7nxpwDAe+dWW7Xhh1abhWMNWgOhlW508qr", - "KrpcKm7twDXu1FjpUOaGLlYVr6kGFW3Kja3b0K9tw7hu54UajfPpFZfhUjSLYqCzj1fQzgY6Xj6Qpk+z", - "S9vCnMxSV0Wfw3fyrBK9dmvA1JpYE6u3QtPqcxRHZtKX1hQK+pQCUhUbNNwG6auZtd2J2AsAP7x6GoCy", - "tTeR9Eavb2pLPwtDFeCmp4OtE1T6iDv332pktcTTYrdbh2o64e/csbTTYEels5dJ79O6CK3p8JOmwcN5", - "0MgOhO6LFwnRYNqgl7sSnWk7R2Y/eo8OS31JTc0rCGmVqU8sg4i/kmH7vsbpJjkbkRw5x++dy7rDbMdc", - "vrfVZVZkAnh+/EE1sHIKJL4D2pEfDk9Yh9Hs3uyzy3YjY3+RZfKbfj2txbpki5cbivZi05m7tKyh2W0/", - "3JR1PbOu6WMr1k3rZxavKLmbcPtryezWgtMgVnrcN5qe5oTQQRkvpl6BKMdevc2f1pzsz9FI0l64GDj2", - "AipXtmrBvGlSgVaXjUPYTi47OjidDZga5Y0SYwNcFSprFkfO8c+43FltH89p/YaOg8UJRATTXWnhdmo2", - "np5izjbUjzfHrKLw3Rx0n8UlnMZEYNqb6NP66t1Zwh7eBW+F1oGqx3jNYGRWu4/x2Y4hrEJxEcpcb6QX", - "cawZgAbeaFD4CF2aaxBEKrLQtQqVnumGcO/19RXy0Qa4KYLQi9PZ6UwdjaVAcUrQHL08nZ2+1NTItWbX", - "GU7JWVjM22waqESrFfgqQvPKRK5xSerb2Wxvl15KJK6LLxk94aBKysgLYwJUeoZmm7KrQ74yxLhwFESf", - "1e8MPWpUmgU8M/7AyYBfiJA3mbbmnc4/ztlkLj/jYol46rHVrpfDu9z3vzQtKRMOPhW3JezVPhDyDYu2", - "e9OR1m2Mx7oR2jdvGzJ6sU8d7RCFZ5NAPdixJYLi8/kY6VTuGn4igVat4OwjiR7NMCwGUxjUpXypf8+l", - "XGP1eXuIpphjID2VIecGbP+W4hLeJzOJLtf5Znt1eWDHaV9U6FDNyD79kplfvSz91g2nXHJmLj4/vmup", - "/Rk8qCrtNBSbzmDwo16iwtXt78NylfAgzyw4x5XkBaEmWXfcR65L8hKiLIXIU9m/d3XtGexrwJG9IX5h", - "kJ5cElEtA0ukLRRfn3g5AM0vMT8NZlfou7GQnW5xdowIxOHEkPBF+1mXTPPGSpcHtq2Xw4olfzWqLZxr", - "ZbG8eHPqKzM5VX3t39xuJUs/nanlFeVXYGe2qu2vjW7zRceoj/Ih34gaqaDrs6yT8oMcslZq3I89cr1U", - "iKpTNF9I3ZRbycjaqSr5ofopZ9SRa6jz2Q/DGy4qH4v5jIouy7JDF14jtPu59GoG9vKzUGWyULOe8SWY", - "BXXcMuxizRllMVuREMdeCvxEzwpVOeYZyvdSlT0rS0NZ/MHF+gtpI9b9xjpV7+nlYVWth0rETu9/VNdU", - "los69ubjkufwMhDdh+rN+rj/8DLurjvNgB8iTxQiL2vQZwfzKRxM5T2wPuW5Lb6zcDjtKd/FdqjOr3AP", - "Qp7oC/Veilf6esuKs6y88CKe9egIeuS7v3BpXyEvRV1+caj/JdZOxXxSl2ZM1LuVLH1KvXPkHsufJiCt", - "9WdyPnS6kJ/t8wP6DvulHlerk7MQhPCI8HBMNrDbXJ4DjrbdJ70xjw/ZAiw+IeEcyFgpERD63p4md2fV", - "ODzhr6UXAxbSYxT6vrCq//t/AAAA//8=", + "7Fzdc9y2Ef9XMGwe2hlKOsdy0igPHVtyGs2kqUZK81BPyoHIvTtEIEAD4EkXj/73Dj74DR5J3YcdW3lx", + "dAR2F/uF3R8IfghinmacAVMyOPsQZFjgFBQI89cPgqf6X8KCs+B9DmIdhAHDKQRnwVw/CwMZLyHFetCc", + "ixSr4CxIsIIjRVIIwkCtMz1YKkHYInh8DIPrnF1elEQzrJYVTZIEYSDgfU4EJMGZEjl4OeS5GdklfgNS", + "Er5HBr/wPn0oPl0bj1oYmXEmwej7DU6u4X0OUum/Ys4UMPO/OMsoibEinJ38LjnTv1W8vhIwD86Cv5xU", + "tjyxT+XJWyG4sKwSkLEgmSYSnAWXbIUpSZBwDB/D4JyzOSXxAZhfg+S5iAFJhRWguGD8GAYXkAFLgMXr", + "/zC8woTiWwr7l+g1KtwCJaUEiEiU16R4DINLpkAwTC2hA1jJskMSxAoEAjswDH7m6gees+SAtmJcobnh", + "qQe5eZrs6wcibzKIjQBJQvRETK8Ez0Aool17jqmEMMhqP2mxcyt0ShhJ8zQ4e1GGCGEKFmBWOndJqPvk", + "jtj1A9OT3wWUSKXjG7MF2H8Tnga/deIuDCiwhVoO81bcz3mFaW4XQRSksjao4uF+wELgdWBDvcg776zo", + "lWT89new7n8OlF5DxoXRTEthQGl0B2svO2NSSazRNpv6inN6XhuuTU6kIixWEclkQy0zn1qWnHERCayg", + "mep4rqMkDFL8UCq1Tonl1IWzzbyOMsvTW0vYbD+y34/61VxpUGGxABUZ7xJGVz1sKxorLAhmbs7Q8luW", + "LI1SSt+m19Ju01ReHxCAFVznrLYZTIgr/AAbVbjJNcpQ9mk2xjorQiQh5iyxflJY+usXp9+e/v3lN6ff", + "hgMxlRBMI70h8lxF1tgJzHFOVXD2YjabzcIhqjOvU6b4IUpyYXLfJBF73KNFWuI0o7AzijyBeuqSisR3", + "xoc4p96UZcsMw/wnl72MIlLCyr890zLBbyGyMdEscQQJ+sbLKAPhVtxc8KtXQ+YdDr8MK72pBWfB//76", + "7vXRf/HRH799+Prxb//4yieQgjSjLtNsWmsY3Aui4N+Mri2jdqAaBdbohTZQnC263t0fma7KfFp0PgfR", + "cxANBlEm+MN6usfvOvr8EWSFmxQ3bxOiJuxnzQL0X7nSC0AiZ6iKpWP0dgViXfxianWeWZJIcqSWgDK8", + "phwnKMYMLQS/R4qjmOs6ep4LtdT1dEIs8TkBmsjvES4aIqSWWCEJSiLGGSA+1yRTzUaAXhckx0E7uJ/k", + "X489CpuYZvxKk5bIl6O4oi+b1IjYPNKJ4xSkxAvfs3YRaEOhGO8LgR8BU9tyNJnrDjiX9TTG7zy5q8XQ", + "zfIy4jTpsvEl9TKNEaa+OQ3CgapfN8VJhNVYeCMMSOZVa20XmCiCVFioSUK09EayoEGltqpKrrCrLZ+i", + "L6+u+X1X01gyf4OGFSy46OveyoTdeZYweUujJVGTGs5inm6KIalNuOWcAjZd35wIqSIJwMbbdCFgzTiR", + "EMUUS78kS1LrpSaauMdniPT/TvHkFQgi7yIZc9Hclot8M9St9jWCxrVKI1cmtbKHxi8azLu6bNmsYfqG", + "terrrqvb56btbr+bGrDCMTAFYrjzT/ktoTA8ToAkCTBFMB0enLM7xu/ZxMbbidLkFdZXU1Hu08s/Bb9X", + "yytOmAdumZLp2vjJJKdvLQx3IAOf+NeAE8LARmBrP6MkvlvyXII/7DMu1UI08JTyaUuWcmhYp+qXJ8uV", + "SZo3eZpim8tajlZ48ziUaU7xYgHJtMEZiBhaiceDS7VjvYNEKa4wHcO6pbBqXnMBXQnDlj68SiXy7k0e", + "34EPDRwDVulEcQvUX93gh80J0BP+hE2b0tKOFcbSsQK4POlfPbcOtV1ozgVPo75KhOjOJROwIjyXW9RG", + "ivtZ+EK7EKiY1SuGVye5Rx2xgSWm1WbTEF+SjDgfq/rrrqI7Va7IGbNdrFQ8y8x2NyeMyCUk3t69AG6i", + "hMiMYn+ttA2Sa5bUQolKZuUShtHdyhg9BjznbE4WXTOm+CFyxC14IHI2dEbR3hR9JHrEuACFCe2K4bhu", + "gom1F1babtalm+b9aicUO8TQKYmWpMalZx2bjkvGi1Y7ePHU0oc8XZm4TYJUJDUel3FOI0n+gE98b93b", + "8ZFbzSh72+7NY+pSixHl9yCi2+KYtVtImWJ+SaTiC4HT0axru7qHvwRBYPw6bsxwW8J6qCmRM92UJBYi", + "rkNEvywBSRuJiEikaecKEqT3J4RRjHVWRrYpdigOSrlUSIB2A8RvJYiV2aHl96ju4wizBHn8EmEByGgV", + "Ga3K42oT6atAW9nV5+19NquvvhnCHdNNLdZKM4UuzVjn82WoG6PAtyvw9RjtzOAJb11+y2gTQAAF5uUB", + "YKJ4idmiDwBgcN/PORNE+0a0EbgoBtnqZ/CktRiu1d/Hld9C1I7kQcKdKDZk+J0PMqkpwD9NKCXdqUp7", + "br3m882VEVa6eGhiLu31SSeZp3FWKtKbeB9T8xySzc8J631uwzmS8N5b5fZN2AJyq3FsUPMorK6dTl1V", + "8+XKcRsLbminoUqPM7d8se54bTeoeVMRbP2BfuUA42acl240LqfXUobP0RyLgTMkvIBuNdDzmouyOM02", + "sIVdmZOuzr6g79VZbffaDoBpgFgTu7fS05ondp7KZFNZUzroUxpI3WyweB1lr2YudidyLwl89+ppBCpo", + "b6LoLaxvKqSfx7He4KaXg50V1HDErfG3hlgd83TU7fehhk+EWyOW7kDQ0+ns5J2Cp6EInfcQnvTewXAd", + "NBKBMLh4WRANlg1muK/QmTZzZPVj5phtaVNR08gKUjln2mSWQcZfyGsdu3pxwxZnI4oj74sevcP6t9me", + "N0A2Ql12RC5BFMsfdANnp0jhO2A99eHwCeswm+3BPjdsOzF2t7NMfqd0A7TYtGz5Gk0JL7aTuc/LWp7d", + "zcNtWzcr64Y/dva6aXhm+ZaKH4TbHSSzHQRnSCzMcd9oedonhB7JRHnqFcnq2Gsj+NM5J/tzAEkmC5cH", + "jhsJVSM7vWABmtSoNW3jMbZXyx4EpxeAaUjeajFWIHSjsuQ08R7/jKud9fTxmjZv6HhUnEJCMNtWFuFO", + "zcbLU56zDeHxdpl1FqFfg/61+IzTOhGYdudhGq7eXyXs4NZBZ2sd6Hps1oxGVrW7OD7bcgurSVxuZb67", + "D+U+1t6ABt5o0PwIm9sLN0RpsYIrvVUii4YI9PrqMgiDFQjbBAUvjmfHM700ngHDGQnOgpfHs+OXRhq1", + "NOo6wRk5icvzNlcGatMaB75MgrPaiVzrOt7Xs9nOrldVTHxXrHJ2JEC3lAmKKQGmkJXZlex6ka+sMD4e", + "pdAnzdtpj4aVUYHIbT7wKuAnItV1bqJ5q/WPSza5L8/4VCKfumw96+XwLP9NQyNLxqVHT+W9HHeJFKR6", + "w5P1znykc+/nsRmE7h3vlo1e7NJHe0yBXBFoDnZci6D1fDrGOrVbrR/JoPUoOPlAkkd7GEbBNgZNK1+Y", + "3wsrN1R92j1E08qxlJ6qkFNLdvOU8rrnRwuJvtT5Zn15sefE6V5U6HHNxD39nJVfv5b/zk+nGnJir9g/", + "/mb2wXjZddq3CVHSnue6awJV0YX4HGEkcnaMroHhlLCF/RthKjkS+jewk+MloUlxw0C69/4VoRTFWIi1", + "HkMEWgDTLgMJ0jNDRAGvDFG2Ru7VDkc1QbdrtNQpJmeK5/HS3hRoupy7SrKnFNy6qDIqAc8OkYDzLMGf", + "eY7pZOkTeMi4UMexXPXWLm/NEF1d3fw6nIYUPKgTR87zrYZbwmxv6flQQ9MkF5DkGSRIN6vo8gpZ7kvA", + "ift0xrllenRBZB21qJh2WHzu2ahrXgHAiq87PDnDeSu1a0fZu4sfJF4FHFkRvrCQFSUO2FcwOKRwv2Yp", + "3uTrGudKR6woX/T7wkJOKp7tPtxuFM8+XqgVAMgXEGdFrbWxlb8pBh2inS/OpEe09KVcn2RbXyxkn619", + "60bvgdv70lS9pvlM2vwiSka2+nXLD7X7haIO3PKfzr4bnnBe+4rWJ4QROJXtGycY4d3PSEF7Y6++l7cV", + "WuACzt+s7zexej6UcOCmfYTjfUHNeyP3jm/gnaYO28SfLwVnnPIFiTFFGYgj82KEbuaRlXwnPf1zqmml", + "mnBwsPnw6Ihxv/Bal9N0vaeDC62kuBFg6K0dDppfKrDBVG7F2fBzcTKUnwbQiua7Tfu3cT9qYd9mghJt", + "byAYzwnmYySY2kuvm5znpvyozP68p7p44nGdn+EepDoyXw9BGV6Yu3wLwfPqdp989qMD+FHo/3C0uy9T", + "mbr6kN/mN/Z7HfNJGN+YXe9G8ewp3fKBEbo/zYa0NN8E+6M3hfzonu8xd7jPkvmAcsFjkBIRiTAlK9ju", + "JSQBOFn3r/TaPt4ngFx+L8d7nOespFtaLAAZcbd2jf0L/lohClgqxBls+nC5+e//AQAA//8=", } // decodeSpec returns the embedded OpenAPI spec as raw JSON bytes, diff --git a/internal/api/runs.go b/internal/api/runs.go index 5eacbb0..8dd8561 100644 --- a/internal/api/runs.go +++ b/internal/api/runs.go @@ -9,7 +9,6 @@ import ( "io" "net/http" "net/url" - "sort" "strconv" "strings" "time" @@ -141,7 +140,7 @@ func (s *Server) CreateRun(ctx context.Context, request openapi.CreateRunRequest return nil, internalError() } child := session.Session{ - ID: uuid.New(), Name: variantName(name, variant.Params), ProxyCiphertext: ciphertext, ProxyNonce: nonce, + ID: uuid.New(), Name: variation.VariantName(name, variant.Params), ProxyCiphertext: ciphertext, ProxyNonce: nonce, ProxyDisplay: variantDisplay, Mode: session.Mode(body.Mode), Cadence: time.Duration(body.CadenceSeconds) * time.Second, ProbesPerSample: probes, ProbeTarget: probeTarget, DialTimeout: dialTimeout, MaxSamples: cloneInt(body.MaxSamples), @@ -557,24 +556,6 @@ func mapVariant(v variation.VariantSession) openapi.VariantSummary { } } -// variantName combines the run name with a compact, deterministic suffix -// built from the variant's sorted params so child sessions are distinguishable. -func variantName(runName string, params map[string]string) string { - if len(params) == 0 { - return runName - } - keys := make([]string, 0, len(params)) - for k := range params { - keys = append(keys, k) - } - sort.Strings(keys) - parts := make([]string, 0, len(keys)) - for _, k := range keys { - parts = append(parts, k+"="+params[k]) - } - return runName + " (" + strings.Join(parts, ",") + ")" -} - // credentialInPassword reports whether a substituted axis value landed in the // password position of a rendered variant URL. It parses the actual rendered // URL (so a template that reconstructs "//" from an empty axis value cannot diff --git a/internal/api/runs_test.go b/internal/api/runs_test.go index 0b25f29..46bbd99 100644 --- a/internal/api/runs_test.go +++ b/internal/api/runs_test.go @@ -2,6 +2,7 @@ package api import ( "context" + "encoding/json" "errors" "io" "net/http" @@ -216,6 +217,10 @@ type memoryRunStore struct { lastObservationLimit int streamErr error runByIDErr error + renameRunErr error + // customized stands in for the name_customized column the real store keeps + // on each session row: the set of children a person has renamed. + customized map[uuid.UUID]bool } func newMemoryRunStore() *memoryRunStore { @@ -223,6 +228,7 @@ func newMemoryRunStore() *memoryRunStore { children: map[uuid.UUID][]variation.ChildSession{}, poolIPs: map[uuid.UUID][]variation.IPRow{}, observations: map[uuid.UUID][]variation.IPObservation{}, + customized: map[uuid.UUID]bool{}, } } @@ -276,6 +282,37 @@ func (m *memoryRunStore) RunIPObservations(_ context.Context, id uuid.UUID, limi } return obs, nil } + +// RenameRun mirrors the real store: the run is renamed, and a child follows it +// unless its name was customized, which the real store records as provenance on +// the session row rather than inferring from the current text. +func (m *memoryRunStore) RenameRun(_ context.Context, id uuid.UUID, name string) error { + if m.renameRunErr != nil { + return m.renameRunErr + } + for i := range m.runs { + if m.runs[i].ID != id { + continue + } + m.runs[i].Name = name + children := m.children[id] + for j := range children { + if m.customized[children[j].Session.ID] { + continue + } + var params map[string]string + if len(children[j].Params) > 0 { + if err := json.Unmarshal(children[j].Params, ¶ms); err != nil { + continue + } + } + children[j].Session.Name = variation.VariantName(name, params) + } + return nil + } + return variation.ErrRunNotFound +} + func (m *memoryRunStore) DeleteRun(_ context.Context, id uuid.UUID) error { delete(m.children, id) for i, r := range m.runs { diff --git a/internal/api/server.go b/internal/api/server.go index cfb76b8..a8d3369 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -122,40 +122,74 @@ func (s *Server) Handler() http.Handler { return openapi.HandlerWithOptions(strict, openapi.ChiServerOptions{ BaseRouter: router, ErrorHandlerFunc: requestErrorHandler, - Middlewares: []openapi.MiddlewareFunc{validateCreateSessionRequest}, + Middlewares: []openapi.MiddlewareFunc{validateRequestBody}, }) } -// validateCreateSessionRequest caps the body size of POST /api/sessions and -// POST /api/runs, and additionally validates the field allowlist for -// /api/sessions (runs have a different, axes-based body shape that is -// validated downstream in the run-expansion path instead). -func validateCreateSessionRequest(next http.Handler) http.Handler { +// validateRequestBody caps the body size of every route that accepts one and +// validates its field allowlist. Without the cap the generated decoder buffers +// the whole body before any handler validation runs, so an oversized payload +// would allocate unbounded memory; without the allowlist the decoder silently +// drops unknown fields and trailing data despite additionalProperties:false. +// +// The generated router applies this middleware inside each route's wrapper, so +// it only ever sees requests that matched a declared route. That makes the +// PATCH prefixes exact: the edit routes are the only PATCH routes in the spec. +func validateRequestBody(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var validate func([]byte) error switch { case r.Method == http.MethodPost && r.URL.Path == "/api/sessions": - raw, ok := readCappedBody(w, r) - if !ok { - return - } - if err := validateCreateSessionJSON(raw); err != nil { - requestErrorHandler(w, r, err) - return - } + validate = validateCreateSessionJSON case r.Method == http.MethodPost && r.URL.Path == "/api/runs": - raw, ok := readCappedBody(w, r) - if !ok { - return - } - if err := validateCreateRunJSON(raw); err != nil { - requestErrorHandler(w, r, err) - return - } + // Runs have an axes-based body whose nested shape is validated in + // the run-expansion path; this checks the top-level allowlist. + validate = validateCreateRunJSON + case r.Method == http.MethodPatch && strings.HasPrefix(r.URL.Path, "/api/sessions/"), + r.Method == http.MethodPatch && strings.HasPrefix(r.URL.Path, "/api/runs/"): + validate = validateEditJSON + default: + next.ServeHTTP(w, r) + return + } + raw, ok := readCappedBody(w, r) + if !ok { + return + } + if err := validate(raw); err != nil { + requestErrorHandler(w, r, err) + return } next.ServeHTTP(w, r) }) } +// validateEditJSON enforces the strict shape of both edit payloads: an object +// carrying only editable properties, no null on a property that is a string +// when present, and no trailing data. Properties stay optional so the payload +// can grow, but an unknown or typo'd one is refused rather than ignored. +func validateEditJSON(raw []byte) error { + var fields map[string]json.RawMessage + decoder := json.NewDecoder(bytes.NewReader(raw)) + if err := decoder.Decode(&fields); err != nil || fields == nil { + return invalidRequest() + } + if err := decoder.Decode(&struct{}{}); !errors.Is(err, io.EOF) { + return invalidRequest() + } + for name, value := range fields { + switch name { + case "name": + if bytes.Equal(bytes.TrimSpace(value), []byte("null")) { + return invalidRequest() + } + default: + return invalidRequest() + } + } + return nil +} + // readCappedBody reads r.Body through a maxCreateSessionBodyBytes-limited // reader and resets r.Body/r.ContentLength so downstream handlers can read it // again. On error it writes the request-error response and returns ok=false; diff --git a/internal/api/server_test.go b/internal/api/server_test.go index 864b6f5..8140eb1 100644 --- a/internal/api/server_test.go +++ b/internal/api/server_test.go @@ -687,6 +687,7 @@ type memoryStore struct { rejectCanceledStop bool deleteCalls int reenableErr error + renameErr error } func newMemoryStore() *memoryStore { return &memoryStore{sessions: []session.Session{}} } @@ -761,6 +762,19 @@ func (s *memoryStore) Reenable(_ context.Context, id uuid.UUID, at time.Time) er return session.ErrNotFound } +func (s *memoryStore) Rename(_ context.Context, id uuid.UUID, name string) error { + if s.renameErr != nil { + return s.renameErr + } + for i := range s.sessions { + if s.sessions[i].ID == id { + s.sessions[i].Name = name + return nil + } + } + return session.ErrNotFound +} + func (s *memoryStore) Delete(_ context.Context, id uuid.UUID) error { s.deleteCalls++ if s.deleteErr != nil { diff --git a/internal/db/models.go b/internal/db/models.go index 245fa56..385c0d9 100644 --- a/internal/db/models.go +++ b/internal/db/models.go @@ -67,6 +67,7 @@ type SamplingSession struct { VariantParams []byte `json:"variant_params"` CellKey *string `json:"cell_key"` TargetCountry string `json:"target_country"` + NameCustomized bool `json:"name_customized"` } type SessionIp struct { diff --git a/internal/db/querier.go b/internal/db/querier.go index 24391e7..0130d9f 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -19,9 +19,27 @@ type Querier interface { InsertRunSession(ctx context.Context, arg InsertRunSessionParams) error InsertSession(ctx context.Context, arg InsertSessionParams) error ReenableSession(ctx context.Context, arg ReenableSessionParams) (int64, error) + // Guarded on provenance rather than on the current text, so a name a person + // chose is never rewritten even when it coincides with what some run name would + // generate. The guard doubles as the concurrency check: a session rename that + // commits between the cascade's read and this write sets name_customized, so + // the re-evaluated WHERE matches no row. + RenameGeneratedRunSession(ctx context.Context, arg RenameGeneratedRunSessionParams) (int64, error) + // This UPDATE also serializes concurrent run renames: it takes the run row's + // lock, so a second rename waits here and then reads children the first one has + // already rewritten. Do not promote this to SELECT ... FOR UPDATE — that + // conflicts with the KEY SHARE lock a child row update takes for its run_id + // foreign key, and deadlocks the cascade against a concurrent session rename + // holding the child's row lock. A plain UPDATE of a non-key column takes the + // weaker FOR NO KEY UPDATE, which does not conflict. + RenameRun(ctx context.Context, arg RenameRunParams) (int64, error) + // Renaming records provenance: the name is now one a person chose, so a later + // run rename must not rewrite it back to a generated one. + RenameSession(ctx context.Context, arg RenameSessionParams) (int64, error) ReputationByIP(ctx context.Context, ip string) (ReputationByIPRow, error) RunByID(ctx context.Context, id uuid.UUID) (RunByIDRow, error) RunIPObservations(ctx context.Context, arg RunIPObservationsParams) ([]RunIPObservationsRow, error) + RunSessionVariantParams(ctx context.Context, runID pgtype.UUID) ([]RunSessionVariantParamsRow, error) RunSessions(ctx context.Context, runID pgtype.UUID) ([]RunSessionsRow, error) RunningSessions(ctx context.Context) ([]RunningSessionsRow, error) Runs(ctx context.Context) ([]RunsRow, error) diff --git a/internal/db/query/runs.sql b/internal/db/query/runs.sql index 7fbc86b..060d075 100644 --- a/internal/db/query/runs.sql +++ b/internal/db/query/runs.sql @@ -10,7 +10,7 @@ INSERT INTO sampling_sessions ( max_samples, max_duration_seconds, status, samples_taken, probes_ok, probes_total, distinct_ips, last_sample_at, last_primary_ip, last_rtt_ms, last_error, created_at, started_at, stopped_at, sequence_offset, - target_country, run_id, variant_params, cell_key + target_country, run_id, variant_params, cell_key, name_customized ) VALUES ( sqlc.arg(id), sqlc.arg(name), sqlc.arg(proxy_ciphertext), sqlc.arg(proxy_nonce), sqlc.arg(proxy_display), sqlc.arg(mode), sqlc.arg(cadence_seconds), @@ -21,7 +21,9 @@ INSERT INTO sampling_sessions ( NULLIF(sqlc.arg(last_primary_ip)::text, '')::inet, sqlc.narg(last_rtt_ms), NULLIF(sqlc.arg(last_error)::text, ''), sqlc.arg(created_at), sqlc.narg(started_at), sqlc.narg(stopped_at), sqlc.arg(sequence_offset), - sqlc.arg(target_country), sqlc.arg(run_id), sqlc.arg(variant_params), sqlc.arg(cell_key) + sqlc.arg(target_country), sqlc.arg(run_id), sqlc.arg(variant_params), sqlc.arg(cell_key), + -- A child's name is generated from the run name and its params at creation. + false ); -- name: Runs :many @@ -84,5 +86,33 @@ WHERE s.run_id = sqlc.arg(run_id) ORDER BY si.last_seen DESC LIMIT sqlc.arg(row_limit); +-- name: RenameRun :execrows +-- This UPDATE also serializes concurrent run renames: it takes the run row's +-- lock, so a second rename waits here and then reads children the first one has +-- already rewritten. Do not promote this to SELECT ... FOR UPDATE — that +-- conflicts with the KEY SHARE lock a child row update takes for its run_id +-- foreign key, and deadlocks the cascade against a concurrent session rename +-- holding the child's row lock. A plain UPDATE of a non-key column takes the +-- weaker FOR NO KEY UPDATE, which does not conflict. +UPDATE variation_runs +SET name = sqlc.arg(name) +WHERE id = sqlc.arg(id); + +-- name: RenameGeneratedRunSession :execrows +-- Guarded on provenance rather than on the current text, so a name a person +-- chose is never rewritten even when it coincides with what some run name would +-- generate. The guard doubles as the concurrency check: a session rename that +-- commits between the cascade's read and this write sets name_customized, so +-- the re-evaluated WHERE matches no row. +UPDATE sampling_sessions +SET name = sqlc.arg(name) +WHERE id = sqlc.arg(id) AND NOT name_customized; + +-- name: RunSessionVariantParams :many +SELECT s.id, COALESCE(s.variant_params, '{}'::jsonb) AS variant_params +FROM sampling_sessions AS s +WHERE s.run_id = sqlc.arg(run_id) +ORDER BY s.created_at ASC, s.id ASC; + -- name: DeleteRun :exec DELETE FROM variation_runs WHERE id = sqlc.arg(id); diff --git a/internal/db/query/sessions.sql b/internal/db/query/sessions.sql index 8ff58e2..1cecfc7 100644 --- a/internal/db/query/sessions.sql +++ b/internal/db/query/sessions.sql @@ -5,7 +5,7 @@ INSERT INTO sampling_sessions ( max_samples, max_duration_seconds, status, samples_taken, probes_ok, probes_total, distinct_ips, last_sample_at, last_primary_ip, last_rtt_ms, last_error, created_at, started_at, stopped_at, sequence_offset, - target_country + target_country, name_customized ) VALUES ( sqlc.arg(id), sqlc.arg(name), sqlc.arg(proxy_ciphertext), sqlc.arg(proxy_nonce), sqlc.arg(proxy_display), sqlc.arg(mode), sqlc.arg(cadence_seconds), @@ -16,7 +16,9 @@ INSERT INTO sampling_sessions ( NULLIF(sqlc.arg(last_primary_ip)::text, '')::inet, sqlc.narg(last_rtt_ms), NULLIF(sqlc.arg(last_error)::text, ''), sqlc.arg(created_at), sqlc.narg(started_at), sqlc.narg(stopped_at), sqlc.arg(sequence_offset), - sqlc.arg(target_country) + sqlc.arg(target_country), + -- A standalone session is always named by the person creating it. + true ); -- name: Sessions :many @@ -82,6 +84,13 @@ SET status = 'running', stopped_at = NULL WHERE id = sqlc.arg(id) AND status IN ('stopped', 'finished'); +-- name: RenameSession :execrows +-- Renaming records provenance: the name is now one a person chose, so a later +-- run rename must not rewrite it back to a generated one. +UPDATE sampling_sessions +SET name = sqlc.arg(name), name_customized = true +WHERE id = sqlc.arg(id); + -- name: DeleteSession :exec DELETE FROM sampling_sessions WHERE id = sqlc.arg(id); diff --git a/internal/db/runs.go b/internal/db/runs.go index 1b8454e..f1898e4 100644 --- a/internal/db/runs.go +++ b/internal/db/runs.go @@ -231,6 +231,54 @@ func (s *Store) StreamPoolIPs(ctx context.Context, runID uuid.UUID, visit func(v return rows.Err() } +func (s *Store) RenameRun(ctx context.Context, id uuid.UUID, name string) error { + tx, err := s.pool.Begin(ctx) + if err != nil { + return fmt.Errorf("begin rename run: %w", err) + } + defer func() { _ = tx.Rollback(ctx) }() + q := s.q.WithTx(tx) + + // This UPDATE takes the run row's lock, which serializes concurrent run + // renames: a second one waits here and then reads children this one has + // already rewritten. + rows, err := q.RenameRun(ctx, RenameRunParams{ID: id, Name: name}) + if err != nil { + return fmt.Errorf("rename run: %w", err) + } + if rows == 0 { + return variation.ErrRunNotFound + } + + children, err := q.RunSessionVariantParams(ctx, pgUUID(id)) + if err != nil { + return fmt.Errorf("run session variant params: %w", err) + } + for _, child := range children { + var params map[string]string + if len(child.VariantParams) > 0 { + if err := json.Unmarshal(child.VariantParams, ¶ms); err != nil { + // Without readable params there is no name to generate, so leave + // the child showing the name it already has. + continue + } + } + // Whether the child follows the rename is decided by the stored + // provenance flag in the statement's WHERE clause, not by comparing its + // current text against a generated name — a person may well have chosen + // a name that some run name would generate. + if _, err := q.RenameGeneratedRunSession(ctx, RenameGeneratedRunSessionParams{ + ID: child.ID, Name: variation.VariantName(name, params), + }); err != nil { + return fmt.Errorf("rename run session: %w", err) + } + } + if err := tx.Commit(ctx); err != nil { + return fmt.Errorf("commit rename run: %w", err) + } + return nil +} + func (s *Store) DeleteRun(ctx context.Context, id uuid.UUID) error { if err := s.q.DeleteRun(ctx, id); err != nil { return fmt.Errorf("delete run: %w", err) diff --git a/internal/db/runs.sql.go b/internal/db/runs.sql.go index 77212b1..5a359b8 100644 --- a/internal/db/runs.sql.go +++ b/internal/db/runs.sql.go @@ -57,7 +57,7 @@ INSERT INTO sampling_sessions ( max_samples, max_duration_seconds, status, samples_taken, probes_ok, probes_total, distinct_ips, last_sample_at, last_primary_ip, last_rtt_ms, last_error, created_at, started_at, stopped_at, sequence_offset, - target_country, run_id, variant_params, cell_key + target_country, run_id, variant_params, cell_key, name_customized ) VALUES ( $1, $2, $3, $4, $5, $6, $7, @@ -68,7 +68,9 @@ INSERT INTO sampling_sessions ( NULLIF($19::text, '')::inet, $20, NULLIF($21::text, ''), $22, $23, $24, $25, - $26, $27, $28, $29 + $26, $27, $28, $29, + -- A child's name is generated from the run name and its params at creation. + false ) ` @@ -139,6 +141,56 @@ func (q *Queries) InsertRunSession(ctx context.Context, arg InsertRunSessionPara return err } +const renameGeneratedRunSession = `-- name: RenameGeneratedRunSession :execrows +UPDATE sampling_sessions +SET name = $1 +WHERE id = $2 AND NOT name_customized +` + +type RenameGeneratedRunSessionParams struct { + Name string `json:"name"` + ID uuid.UUID `json:"id"` +} + +// Guarded on provenance rather than on the current text, so a name a person +// chose is never rewritten even when it coincides with what some run name would +// generate. The guard doubles as the concurrency check: a session rename that +// commits between the cascade's read and this write sets name_customized, so +// the re-evaluated WHERE matches no row. +func (q *Queries) RenameGeneratedRunSession(ctx context.Context, arg RenameGeneratedRunSessionParams) (int64, error) { + result, err := q.db.Exec(ctx, renameGeneratedRunSession, arg.Name, arg.ID) + if err != nil { + return 0, err + } + return result.RowsAffected(), nil +} + +const renameRun = `-- name: RenameRun :execrows +UPDATE variation_runs +SET name = $1 +WHERE id = $2 +` + +type RenameRunParams struct { + Name string `json:"name"` + ID uuid.UUID `json:"id"` +} + +// This UPDATE also serializes concurrent run renames: it takes the run row's +// lock, so a second rename waits here and then reads children the first one has +// already rewritten. Do not promote this to SELECT ... FOR UPDATE — that +// conflicts with the KEY SHARE lock a child row update takes for its run_id +// foreign key, and deadlocks the cascade against a concurrent session rename +// holding the child's row lock. A plain UPDATE of a non-key column takes the +// weaker FOR NO KEY UPDATE, which does not conflict. +func (q *Queries) RenameRun(ctx context.Context, arg RenameRunParams) (int64, error) { + result, err := q.db.Exec(ctx, renameRun, arg.Name, arg.ID) + if err != nil { + return 0, err + } + return result.RowsAffected(), nil +} + const runByID = `-- name: RunByID :one SELECT run.id, run.name, run.template_ciphertext, run.template_nonce, run.template_display, @@ -285,6 +337,38 @@ func (q *Queries) RunIPObservations(ctx context.Context, arg RunIPObservationsPa return items, nil } +const runSessionVariantParams = `-- name: RunSessionVariantParams :many +SELECT s.id, COALESCE(s.variant_params, '{}'::jsonb) AS variant_params +FROM sampling_sessions AS s +WHERE s.run_id = $1 +ORDER BY s.created_at ASC, s.id ASC +` + +type RunSessionVariantParamsRow struct { + ID uuid.UUID `json:"id"` + VariantParams []byte `json:"variant_params"` +} + +func (q *Queries) RunSessionVariantParams(ctx context.Context, runID pgtype.UUID) ([]RunSessionVariantParamsRow, error) { + rows, err := q.db.Query(ctx, runSessionVariantParams, runID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []RunSessionVariantParamsRow + for rows.Next() { + var i RunSessionVariantParamsRow + if err := rows.Scan(&i.ID, &i.VariantParams); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const runSessions = `-- name: RunSessions :many SELECT s.id, s.name, COALESCE(s.variant_params, '{}'::jsonb) AS variant_params, diff --git a/internal/db/runs_integration_test.go b/internal/db/runs_integration_test.go index c9aec8c..6edad4b 100644 --- a/internal/db/runs_integration_test.go +++ b/internal/db/runs_integration_test.go @@ -3,11 +3,17 @@ package db_test import ( "context" "encoding/json" + "errors" "net/netip" + "os" + "strings" "testing" "time" "github.com/google/uuid" + "github.com/jackc/pgx/v5/pgxpool" + + "github.com/timo972/proxy-sampler/migrations" "github.com/timo972/proxy-sampler/internal/session" "github.com/timo972/proxy-sampler/internal/variation" @@ -131,3 +137,428 @@ func TestRunStatusDerivation(t *testing.T) { t.Fatalf("status = %q, want stopped", summary.Status) } } + +// TestRenameRunCascadesToGeneratedVariantNamesOnly proves the cascade rule +// against real SQL: children still carrying the name generated from the old run +// name follow the rename, and a hand-renamed child keeps its own name. +func TestRenameRunCascadesToGeneratedVariantNamesOnly(t *testing.T) { + sessionStore := testStore(t) + store := sessionStore.(variation.Store) + ctx := context.Background() + + generated := map[string]string{"country": "de"} + run := variation.Run{ + ID: uuid.New(), Name: "Alpha", TemplateCiphertext: []byte("c"), + TemplateNonce: []byte("n"), TemplateDisplay: "gate:1080", + Axes: json.RawMessage(`{"country":{"kind":"list","values":["de","us"]}}`), + CreatedAt: nowUTC(), + } + generatedChild, customChild := testSession(), testSession() + generatedChild.ID, customChild.ID = uuid.New(), uuid.New() + // Creation always generates both names, exactly as CreateRun does. + generatedChild.Name = variation.VariantName("Alpha", generated) + customChild.Name = variation.VariantName("Alpha", map[string]string{"country": "us"}) + children := []variation.ChildSession{ + {Session: generatedChild, Params: json.RawMessage(`{"country":"de"}`), CellKey: `{"country":"de"}`}, + {Session: customChild, Params: json.RawMessage(`{"country":"us"}`), CellKey: `{"country":"us"}`}, + } + if err := store.CreateRun(ctx, run, children); err != nil { + t.Fatal(err) + } + // The second child becomes custom the only way it can in production: a + // session rename, which is what records its provenance. + if err := sessionStore.Rename(ctx, customChild.ID, "My custom probe"); err != nil { + t.Fatal(err) + } + + if err := store.RenameRun(ctx, run.ID, "Beta"); err != nil { + t.Fatal(err) + } + + summary, err := store.RunByID(ctx, run.ID) + if err != nil { + t.Fatal(err) + } + if summary.Name != "Beta" { + t.Errorf("run name = %q, want Beta", summary.Name) + } + names := map[uuid.UUID]string{} + sessions, err := store.RunSessions(ctx, run.ID) + if err != nil { + t.Fatal(err) + } + for _, s := range sessions { + names[s.SessionID] = s.Name + } + if got, want := names[generatedChild.ID], variation.VariantName("Beta", generated); got != want { + t.Errorf("generated variant name = %q, want %q", got, want) + } + if got := names[customChild.ID]; got != "My custom probe" { + t.Errorf("hand-renamed variant = %q, want it preserved", got) + } +} + +func TestRenameRunUnknownRun(t *testing.T) { + sessionStore := testStore(t) + store := sessionStore.(variation.Store) + + err := store.RenameRun(context.Background(), uuid.New(), "Beta") + if !errors.Is(err, variation.ErrRunNotFound) { + t.Fatalf("error = %v, want ErrRunNotFound", err) + } +} + +// TestRenameSessionUpdatesStandaloneSession covers the session-level rename the +// run cascade builds on. +func TestRenameSessionUpdatesStandaloneSession(t *testing.T) { + store := testStore(t) + ctx := context.Background() + s := insertTestSession(t, store) + + if err := store.Rename(ctx, s.ID, "Frankfurt residential"); err != nil { + t.Fatal(err) + } + reloaded, err := store.SessionByID(ctx, s.ID) + if err != nil { + t.Fatal(err) + } + if reloaded.Name != "Frankfurt residential" { + t.Errorf("name = %q, want the new name", reloaded.Name) + } +} + +// TestRenameSessionSurvivesASamplerTick guards the one interaction between +// renaming and the sampler: a running session keeps its new name when the +// worker writes its next snapshot. +func TestRenameSessionSurvivesASamplerTick(t *testing.T) { + store := testStore(t) + ctx := context.Background() + s := insertTestSession(t, store) + ip := netip.MustParseAddr("203.0.113.7") + now := nowUTC() + + if err := store.Rename(ctx, s.ID, "Renamed mid-flight"); err != nil { + t.Fatal(err) + } + if err := store.SaveTick(ctx, s.ID, session.Snapshot{ + SamplesTaken: 1, ProbesOK: 2, ProbesTotal: 3, DistinctIPs: 1, + LastSampleAt: &now, LastPrimaryIP: ip, + }, []session.IPHit{{IP: ip, SeenAt: now, Hits: 2}}); err != nil { + t.Fatal(err) + } + + reloaded, err := store.SessionByID(ctx, s.ID) + if err != nil { + t.Fatal(err) + } + if reloaded.Name != "Renamed mid-flight" { + t.Errorf("name = %q, want the rename to survive the tick", reloaded.Name) + } + if reloaded.Snapshot.SamplesTaken != 1 { + t.Errorf("samples taken = %d, want the tick to still have been applied", reloaded.Snapshot.SamplesTaken) + } +} + +func TestRenameSessionUnknownSession(t *testing.T) { + store := testStore(t) + + err := store.Rename(context.Background(), uuid.New(), "Anything") + if !errors.Is(err, session.ErrNotFound) { + t.Fatalf("error = %v, want ErrNotFound", err) + } +} + +// TestRenameRunPreservesAChildRenamedDuringTheCascade drives the real race the +// cascade has to survive: a session-level rename that commits after RenameRun +// has read the child's generated name but before it writes the new one. +// +// The interleaving is forced rather than timed. A separate transaction holds a +// row lock on the child, so RenameRun blocks on its UPDATE after the read; the +// holder then renames the child and commits. Under READ COMMITTED, Postgres +// re-evaluates the blocked UPDATE against the newly committed row, so a +// conditional update skips the child while an unconditional one clobbers it. +func TestRenameRunPreservesAChildRenamedDuringTheCascade(t *testing.T) { + sessionStore := testStore(t) + store := sessionStore.(variation.Store) + ctx := context.Background() + + params := map[string]string{"region": "eu"} + run := variation.Run{ + ID: uuid.New(), Name: "Alpha", TemplateCiphertext: []byte("c"), + TemplateNonce: []byte("n"), TemplateDisplay: "gate:1080", + Axes: json.RawMessage(`{"region":{"kind":"list","values":["eu"]}}`), + CreatedAt: nowUTC(), + } + child := testSession() + child.ID = uuid.New() + child.Name = variation.VariantName("Alpha", params) + if err := store.CreateRun(ctx, run, []variation.ChildSession{{ + Session: child, Params: json.RawMessage(`{"region":"eu"}`), CellKey: `{"region":"eu"}`, + }}); err != nil { + t.Fatal(err) + } + + holder, err := pgxpool.New(ctx, os.Getenv("TEST_DATABASE_URL")) + if err != nil { + t.Fatal(err) + } + defer holder.Close() + tx, err := holder.Begin(ctx) + if err != nil { + t.Fatal(err) + } + defer func() { _ = tx.Rollback(ctx) }() + // Take the child's row lock without changing its value, so RenameRun still + // reads the generated name and only blocks once it tries to write. + if _, err := tx.Exec(ctx, "UPDATE sampling_sessions SET name = name WHERE id = $1", child.ID); err != nil { + t.Fatal(err) + } + + renamed := make(chan error, 1) + go func() { renamed <- store.RenameRun(ctx, run.ID, "Beta") }() + + waitForBlockedCascadeWrite(t, ctx, holder) + // Mirrors what the session rename actually writes, provenance included. + if _, err := tx.Exec(ctx, + "UPDATE sampling_sessions SET name = $1, name_customized = true WHERE id = $2", + "My concurrent name", child.ID, + ); err != nil { + t.Fatal(err) + } + if err := tx.Commit(ctx); err != nil { + t.Fatal(err) + } + + select { + case err := <-renamed: + if err != nil { + t.Fatalf("rename run: %v", err) + } + case <-time.After(15 * time.Second): + t.Fatal("RenameRun did not finish after the lock was released") + } + + sessions, err := store.RunSessions(ctx, run.ID) + if err != nil { + t.Fatal(err) + } + if len(sessions) != 1 { + t.Fatalf("run sessions = %d, want 1", len(sessions)) + } + if sessions[0].Name != "My concurrent name" { + t.Errorf("child name = %q, want the concurrent rename preserved", sessions[0].Name) + } + summary, err := store.RunByID(ctx, run.ID) + if err != nil { + t.Fatal(err) + } + if summary.Name != "Beta" { + t.Errorf("run name = %q, want Beta (the run rename still applies)", summary.Name) + } +} + +// waitForBlockedCascadeWrite blocks until the cascade's own child update is +// waiting on a lock, so the test does not race the goroutine it is interleaving +// with. It matches the statement text (sqlc keeps the query name in the SQL) so +// a blocked query from another package sharing this database cannot be mistaken +// for the one under test. +func waitForBlockedCascadeWrite(t *testing.T, ctx context.Context, pool *pgxpool.Pool) { + t.Helper() + deadline := time.Now().Add(15 * time.Second) + for time.Now().Before(deadline) { + var waiting int + err := pool.QueryRow(ctx, ` + SELECT count(*) FROM pg_stat_activity + WHERE wait_event_type = 'Lock' AND state = 'active' + AND query LIKE '%RenameGeneratedRunSession%'`, + ).Scan(&waiting) + if err == nil && waiting > 0 { + return + } + time.Sleep(25 * time.Millisecond) + } + t.Fatal("the cascade's child update never blocked; the interleaving did not happen") +} + +// TestRenameRunPreservesACustomNameThatLooksGenerated is the case text matching +// cannot get right: a child renamed by hand to a name that a *later* run name +// would generate. Renaming the run to that name and then onward must not +// reclassify the custom child as generated and overwrite it. +func TestRenameRunPreservesACustomNameThatLooksGenerated(t *testing.T) { + sessionStore := testStore(t) + store := sessionStore.(variation.Store) + ctx := context.Background() + + params := map[string]string{"region": "eu"} + run := variation.Run{ + ID: uuid.New(), Name: "Alpha", TemplateCiphertext: []byte("c"), + TemplateNonce: []byte("n"), TemplateDisplay: "gate:1080", + Axes: json.RawMessage(`{"region":{"kind":"list","values":["eu"]}}`), + CreatedAt: nowUTC(), + } + child := testSession() + child.ID = uuid.New() + child.Name = variation.VariantName("Alpha", params) + if err := store.CreateRun(ctx, run, []variation.ChildSession{{ + Session: child, Params: json.RawMessage(`{"region":"eu"}`), CellKey: `{"region":"eu"}`, + }}); err != nil { + t.Fatal(err) + } + + // The operator picks a name that happens to match what the generator would + // produce for the run name "Beta". + custom := variation.VariantName("Beta", params) + if err := sessionStore.Rename(ctx, child.ID, custom); err != nil { + t.Fatal(err) + } + + // Renaming to "Beta" must leave it alone (the old name no longer matches)... + if err := store.RenameRun(ctx, run.ID, "Beta"); err != nil { + t.Fatal(err) + } + if got := childName(t, store, run.ID); got != custom { + t.Fatalf("after the first rename child = %q, want %q preserved", got, custom) + } + + // ...and so must renaming onward to "Gamma", even though the child's custom + // name is now exactly what "Beta" would have generated. + if err := store.RenameRun(ctx, run.ID, "Gamma"); err != nil { + t.Fatal(err) + } + if got := childName(t, store, run.ID); got != custom { + t.Errorf("after the second rename child = %q, want %q preserved", got, custom) + } +} + +func childName(t *testing.T, store variation.Store, runID uuid.UUID) string { + t.Helper() + sessions, err := store.RunSessions(context.Background(), runID) + if err != nil { + t.Fatal(err) + } + if len(sessions) != 1 { + t.Fatalf("run sessions = %d, want 1", len(sessions)) + } + return sessions[0].Name +} + +// TestNameCustomizedBackfillClassifiesExistingRows exercises the migration's +// backfill, which is the only chance existing rows get to have their provenance +// inferred. It runs the real statements from the migration file against rows +// reset to the pre-migration default, so the SQL that reproduces VariantName +// cannot drift from VariantName itself unnoticed. +func TestNameCustomizedBackfillClassifiesExistingRows(t *testing.T) { + sessionStore := testStore(t) + store := sessionStore.(variation.Store) + ctx := context.Background() + + multi := map[string]string{"region": "eu", "asn": "64500"} + run := variation.Run{ + ID: uuid.New(), Name: "Alpha", TemplateCiphertext: []byte("c"), + TemplateNonce: []byte("n"), TemplateDisplay: "gate:1080", + Axes: json.RawMessage(`{}`), CreatedAt: nowUTC(), + } + // mixedCase and nonASCII are the cases where a locale-aware cluster + // collation orders keys differently from the bytewise sort.Strings that + // VariantName uses: under en_US.UTF-8 "a" sorts before "Z", and "ä" sorts + // beside "a" rather than after "z". + mixedCase := map[string]string{"Z": "1", "a": "2"} + nonASCII := map[string]string{"ä": "1", "z": "2"} + generated, multiKey, noParams := testSession(), testSession(), testSession() + mixedCaseChild, nonASCIIChild, custom := testSession(), testSession(), testSession() + generated.ID, multiKey.ID, noParams.ID = uuid.New(), uuid.New(), uuid.New() + mixedCaseChild.ID, nonASCIIChild.ID, custom.ID = uuid.New(), uuid.New(), uuid.New() + generated.Name = variation.VariantName("Alpha", map[string]string{"region": "eu"}) + multiKey.Name = variation.VariantName("Alpha", multi) + noParams.Name = variation.VariantName("Alpha", nil) + mixedCaseChild.Name = variation.VariantName("Alpha", mixedCase) + nonASCIIChild.Name = variation.VariantName("Alpha", nonASCII) + custom.Name = "My custom probe" + if err := store.CreateRun(ctx, run, []variation.ChildSession{ + {Session: generated, Params: json.RawMessage(`{"region":"eu"}`), CellKey: `{"region":"eu"}`}, + {Session: multiKey, Params: json.RawMessage(`{"region":"eu","asn":"64500"}`), CellKey: `{}`}, + {Session: noParams, Params: json.RawMessage(`{}`), CellKey: `{}`}, + {Session: mixedCaseChild, Params: json.RawMessage(`{"Z":"1","a":"2"}`), CellKey: `{}`}, + {Session: nonASCIIChild, Params: json.RawMessage(`{"ä":"1","z":"2"}`), CellKey: `{}`}, + {Session: custom, Params: json.RawMessage(`{"region":"us"}`), CellKey: `{"region":"us"}`}, + }); err != nil { + t.Fatal(err) + } + standalone := insertTestSession(t, sessionStore) + + pool, err := pgxpool.New(ctx, os.Getenv("TEST_DATABASE_URL")) + if err != nil { + t.Fatal(err) + } + defer pool.Close() + // Reset every row to the column default, reproducing the state the backfill + // finds when the migration first runs. + if _, err := pool.Exec(ctx, "UPDATE sampling_sessions SET name_customized = false"); err != nil { + t.Fatal(err) + } + for _, statement := range backfillStatements(t) { + if _, err := pool.Exec(ctx, statement); err != nil { + t.Fatalf("backfill statement failed: %v\n%s", err, statement) + } + } + + for _, tt := range []struct { + name string + id uuid.UUID + want bool + }{ + {"generated child", generated.ID, false}, + {"generated child with several params", multiKey.ID, false}, + {"generated child with no params", noParams.ID, false}, + {"generated child with mixed-case keys", mixedCaseChild.ID, false}, + {"generated child with non-ASCII keys", nonASCIIChild.ID, false}, + {"hand-renamed child", custom.ID, true}, + {"standalone session", standalone.ID, true}, + } { + t.Run(tt.name, func(t *testing.T) { + var customized bool + if err := pool.QueryRow(ctx, "SELECT name_customized FROM sampling_sessions WHERE id = $1", tt.id).Scan(&customized); err != nil { + t.Fatal(err) + } + if customized != tt.want { + t.Errorf("name_customized = %v, want %v", customized, tt.want) + } + }) + } +} + +// backfillStatements returns the migration's Up statements other than the ALTER +// that adds the column, read from the migration file itself so the test cannot +// drift from the SQL that actually ships. +func backfillStatements(t *testing.T) []string { + t.Helper() + raw, err := migrations.FS.ReadFile("postgres/20260824120000_session_name_customized.sql") + if err != nil { + t.Fatal(err) + } + up, _, found := strings.Cut(string(raw), "-- +goose Down") + if !found { + t.Fatal("migration has no Down section; the file layout changed") + } + var out []string + for _, statement := range strings.Split(up, ";") { + if strings.Contains(statement, "ALTER TABLE") || strings.TrimSpace(stripSQLComments(statement)) == "" { + continue + } + out = append(out, statement) + } + if len(out) != 2 { + t.Fatalf("found %d backfill statements, want 2; the migration changed shape", len(out)) + } + return out +} + +func stripSQLComments(statement string) string { + var kept []string + for _, line := range strings.Split(statement, "\n") { + if !strings.HasPrefix(strings.TrimSpace(line), "--") { + kept = append(kept, line) + } + } + return strings.Join(kept, "\n") +} diff --git a/internal/db/sessions.sql.go b/internal/db/sessions.sql.go index 59b6f35..4f055fe 100644 --- a/internal/db/sessions.sql.go +++ b/internal/db/sessions.sql.go @@ -47,7 +47,7 @@ INSERT INTO sampling_sessions ( max_samples, max_duration_seconds, status, samples_taken, probes_ok, probes_total, distinct_ips, last_sample_at, last_primary_ip, last_rtt_ms, last_error, created_at, started_at, stopped_at, sequence_offset, - target_country + target_country, name_customized ) VALUES ( $1, $2, $3, $4, $5, $6, $7, @@ -58,7 +58,9 @@ INSERT INTO sampling_sessions ( NULLIF($19::text, '')::inet, $20, NULLIF($21::text, ''), $22, $23, $24, $25, - $26 + $26, + -- A standalone session is always named by the person creating it. + true ) ` @@ -152,6 +154,27 @@ func (q *Queries) ReenableSession(ctx context.Context, arg ReenableSessionParams return result.RowsAffected(), nil } +const renameSession = `-- name: RenameSession :execrows +UPDATE sampling_sessions +SET name = $1, name_customized = true +WHERE id = $2 +` + +type RenameSessionParams struct { + Name string `json:"name"` + ID uuid.UUID `json:"id"` +} + +// Renaming records provenance: the name is now one a person chose, so a later +// run rename must not rewrite it back to a generated one. +func (q *Queries) RenameSession(ctx context.Context, arg RenameSessionParams) (int64, error) { + result, err := q.db.Exec(ctx, renameSession, arg.Name, arg.ID) + if err != nil { + return 0, err + } + return result.RowsAffected(), nil +} + const runningSessions = `-- name: RunningSessions :many SELECT s.id, s.name, s.proxy_ciphertext, s.proxy_nonce, s.proxy_display, s.mode, diff --git a/internal/db/store.go b/internal/db/store.go index d7b726f..f8c02a7 100644 --- a/internal/db/store.go +++ b/internal/db/store.go @@ -117,6 +117,19 @@ func (s *Store) Reenable(ctx context.Context, id uuid.UUID, at time.Time) error return nil } +func (s *Store) Rename(ctx context.Context, id uuid.UUID, name string) error { + rows, err := s.q.RenameSession(ctx, RenameSessionParams{ID: id, Name: name}) + if err != nil { + return fmt.Errorf("rename session: %w", err) + } + if rows == 0 { + // The update is unconditional, so the only way to match no row is a + // session that does not exist. + return session.ErrNotFound + } + return nil +} + func (s *Store) Delete(ctx context.Context, id uuid.UUID) error { if err := s.q.DeleteSession(ctx, id); err != nil { return fmt.Errorf("delete session: %w", err) diff --git a/internal/sampler/worker_test.go b/internal/sampler/worker_test.go index 464213a..3401885 100644 --- a/internal/sampler/worker_test.go +++ b/internal/sampler/worker_test.go @@ -554,6 +554,18 @@ func (s *fakeSessionStore) Reenable(_ context.Context, id uuid.UUID, at time.Tim s.reenableCount.Add(1) return nil } +func (s *fakeSessionStore) Rename(_ context.Context, id uuid.UUID, name string) error { + s.mu.Lock() + defer s.mu.Unlock() + value, ok := s.sessions[id] + if !ok { + return session.ErrNotFound + } + value.Name = name + s.sessions[id] = value + return nil +} + func (s *fakeSessionStore) Delete(_ context.Context, id uuid.UUID) error { s.mu.Lock() defer s.mu.Unlock() diff --git a/internal/session/store.go b/internal/session/store.go index 13fcffd..6de69ca 100644 --- a/internal/session/store.go +++ b/internal/session/store.go @@ -23,6 +23,9 @@ type Store interface { Stop(ctx context.Context, id uuid.UUID, at time.Time) error Finish(ctx context.Context, id uuid.UUID, at time.Time) error Reenable(ctx context.Context, id uuid.UUID, at time.Time) error + // Rename changes a session's display name. It never touches sampling + // state, so it is valid in any status. + Rename(ctx context.Context, id uuid.UUID, name string) error Delete(ctx context.Context, id uuid.UUID) error SaveTick(ctx context.Context, id uuid.UUID, snapshot Snapshot, hits []IPHit) error SessionIPs(ctx context.Context, id uuid.UUID) ([]IPRecord, error) diff --git a/internal/variation/name.go b/internal/variation/name.go new file mode 100644 index 0000000..787ab84 --- /dev/null +++ b/internal/variation/name.go @@ -0,0 +1,26 @@ +package variation + +import ( + "sort" + "strings" +) + +// VariantName combines the run name with a compact, deterministic suffix +// built from the variant's sorted params so child sessions are distinguishable. +// Renaming a run recomputes this to decide which children still carry their +// generated name, so the suffix must stay stable for a given param set. +func VariantName(runName string, params map[string]string) string { + if len(params) == 0 { + return runName + } + keys := make([]string, 0, len(params)) + for k := range params { + keys = append(keys, k) + } + sort.Strings(keys) + parts := make([]string, 0, len(keys)) + for _, k := range keys { + parts = append(parts, k+"="+params[k]) + } + return runName + " (" + strings.Join(parts, ",") + ")" +} diff --git a/internal/variation/name_test.go b/internal/variation/name_test.go new file mode 100644 index 0000000..4f52c9b --- /dev/null +++ b/internal/variation/name_test.go @@ -0,0 +1,17 @@ +package variation + +import "testing" + +func TestVariantNameWithoutParamsIsRunName(t *testing.T) { + if got := VariantName("Frankfurt pool", nil); got != "Frankfurt pool" { + t.Errorf("VariantName = %q, want the bare run name", got) + } +} + +func TestVariantNameSortsParamsForDeterminism(t *testing.T) { + params := map[string]string{"region": "eu", "city": "fra", "asn": "1234"} + want := "Pool (asn=1234,city=fra,region=eu)" + if got := VariantName("Pool", params); got != want { + t.Errorf("VariantName = %q, want %q", got, want) + } +} diff --git a/internal/variation/run.go b/internal/variation/run.go index 7ebfb57..671131a 100644 --- a/internal/variation/run.go +++ b/internal/variation/run.go @@ -88,5 +88,10 @@ type Store interface { // aggregated server-side, so a large export never holds the whole pool in // memory. Rows arrive in ascending IP order. StreamPoolIPs(ctx context.Context, id uuid.UUID, visit func(IPRow) error) error + // RenameRun changes a run's name and, in the same transaction, the names of + // the child sessions that still carry the name VariantName generated from + // the run's previous name. A child renamed by hand no longer matches and is + // left alone. + RenameRun(ctx context.Context, id uuid.UUID, name string) error DeleteRun(ctx context.Context, id uuid.UUID) error } diff --git a/migrations/postgres/20260824120000_session_name_customized.sql b/migrations/postgres/20260824120000_session_name_customized.sql new file mode 100644 index 0000000..40de98d --- /dev/null +++ b/migrations/postgres/20260824120000_session_name_customized.sql @@ -0,0 +1,38 @@ +-- +goose Up +-- name_customized records whether a session's name was chosen by a person +-- rather than generated from its run name and variant params. The run rename +-- cascade consults it instead of comparing the stored name against the name it +-- would have generated: that comparison misclassifies a hand-picked name that +-- happens to equal what some later run name generates, and overwrites it. +ALTER TABLE sampling_sessions ADD COLUMN name_customized boolean NOT NULL DEFAULT false; + +-- Standalone sessions are always named by the person who created them. +UPDATE sampling_sessions SET name_customized = true WHERE run_id IS NULL; + +-- Existing run children have no recorded provenance, so infer it once here the +-- only way available: a child whose name still matches what its run's current +-- name generates is treated as generated, anything else as customized. This +-- mirrors the behaviour of VariantName (params sorted by key, "k=v" joined with +-- commas, empty params yielding the bare run name). +-- +-- ORDER BY ... COLLATE "C" is required, not stylistic. VariantName sorts with +-- Go's sort.Strings, which compares bytewise, while a bare ORDER BY uses the +-- cluster's collation. Under a locale-aware one such as en_US.UTF-8, {"Z":"1", +-- "a":"2"} reconstructs as "a=2,Z=1" instead of "Z=1,a=2" and the child is +-- misclassified as customized, silently dropping it out of later run renames. +UPDATE sampling_sessions AS s +SET name_customized = true +FROM variation_runs AS r +WHERE s.run_id = r.id + AND s.name IS DISTINCT FROM ( + CASE + WHEN s.variant_params IS NULL OR s.variant_params = '{}'::jsonb THEN r.name + ELSE r.name || ' (' || ( + SELECT string_agg(entry.key || '=' || entry.value, ',' ORDER BY entry.key COLLATE "C") + FROM jsonb_each_text(s.variant_params) AS entry + ) || ')' + END + ); + +-- +goose Down +ALTER TABLE sampling_sessions DROP COLUMN name_customized; diff --git a/web/dist/assets/editable-title-D53k_ibM.js b/web/dist/assets/editable-title-D53k_ibM.js new file mode 100644 index 0000000..f0f4461 --- /dev/null +++ b/web/dist/assets/editable-title-D53k_ibM.js @@ -0,0 +1,55 @@ +import{$ as e,A as t,C as n,D as r,E as i,J as a,S as o,T as s,_ as c,b as l,d as u,et as d,f,g as p,h as m,it as h,m as g,nt as _,p as v,q as y,rt as b,tt as x,v as S,w as C,y as w}from"./index-D1Rlp_NN.js";var T=a(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),E=a(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),D=a(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),O=a(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),k=a(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),A=h(x(),1),j=[`top`,`right`,`bottom`,`left`],M=Math.min,N=Math.max,ee=Math.round,te=Math.floor,ne=e=>({x:e,y:e}),re={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function ie(e,t,n){return N(e,M(t,n))}function ae(e,t){return typeof e==`function`?e(t):e}function oe(e){return e.split(`-`)[0]}function se(e){return e.split(`-`)[1]}function ce(e){return e===`x`?`y`:`x`}function le(e){return e===`y`?`height`:`width`}function ue(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function de(e){return ce(ue(e))}function fe(e,t,n){n===void 0&&(n=!1);let r=se(e),i=de(e),a=le(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=xe(o)),[o,xe(o)]}function pe(e){let t=xe(e);return[me(e),t,me(t)]}function me(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var he=[`left`,`right`],ge=[`right`,`left`],_e=[`top`,`bottom`],ve=[`bottom`,`top`];function ye(e,t,n){switch(e){case`top`:case`bottom`:return n?t?ge:he:t?he:ge;case`left`:case`right`:return t?_e:ve;default:return[]}}function be(e,t,n,r){let i=se(e),a=ye(oe(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(me)))),a}function xe(e){let t=oe(e);return re[t]+e.slice(t.length)}function Se(e){return{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}}function Ce(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:Se(e)}function we(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function Te(e,t,n){let{reference:r,floating:i}=e,a=ue(t),o=de(t),s=le(o),c=oe(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}let m=se(t);return m&&(p[o]+=f*(m===`end`?1:-1)*(n&&l?-1:1)),p}async function Ee(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=ae(t,e),p=Ce(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=we(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},y=we(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-y.top+p.top)/v.y,bottom:(y.bottom-h.bottom+p.bottom)/v.y,left:(h.left-y.left+p.left)/v.x,right:(y.right-h.right+p.right)/v.x}}var De=50,Oe=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:Ee},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=Te(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=ae(e,t)||{};if(l==null)return{};let d=Ce(u),f={x:n,y:r},p=de(i),m=le(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,y=g?`clientHeight`:`clientWidth`,b=a.reference[m]+a.reference[p]-f[p]-a.floating[m],x=f[p]-a.reference[p],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),C=S?S[y]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=s.floating[y]||a.floating[m]);let w=b/2-x/2,T=C/2-h[m]/2-1,E=M(d[_],T),D=M(d[v],T),O=C-h[m]-D,k=C/2-h[m]/2+w,A=ie(E,k,O),j=!c.arrow&&se(i)!=null&&k!==A&&a.reference[m]/2-(ke<=0)){let e=(i.flip?.index||0)+1,t=S[e];if(t&&(!(u===`alignment`&&_!==ue(t))||T.every(e=>ue(e.placement)!==_||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=T.filter(e=>{if(x){let t=ue(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}};function je(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Me(e){return j.some(t=>e[t]>=0)}var Ne=function(e){return e===void 0&&(e={}),{name:`hide`,options:e,async fn(t){let{rects:n,platform:r}=t,{strategy:i=`referenceHidden`,...a}=ae(e,t);switch(i){case`referenceHidden`:{let e=je(await r.detectOverflow(t,{...a,elementContext:`reference`}),n.reference);return{data:{referenceHiddenOffsets:e,referenceHidden:Me(e)}}}case`escaped`:{let e=je(await r.detectOverflow(t,{...a,altBoundary:!0}),n.floating);return{data:{escapedOffsets:e,escaped:Me(e)}}}default:return{}}}}},Pe=new Set([`left`,`top`]);async function Fe(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=oe(n),s=se(n),c=ue(n)===`y`,l=Pe.has(o)?-1:1,u=a&&c?-1:1,d=ae(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var Ie=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await Fe(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},Le=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=ae(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=ue(i),p=ce(f),m=u[p],h=u[f],g=(e,t)=>ie(t+d[e===`y`?`top`:`left`],t,t-d[e===`y`?`bottom`:`right`]);o&&(m=g(p,m)),s&&(h=g(f,h));let _=c.fn({...t,[p]:m,[f]:h});return{..._,data:{x:_.x-n,y:_.y-r,enabled:{[p]:o,[f]:s}}}}}},Re=function(e){return e===void 0&&(e={}),{options:e,fn(t){let{x:n,y:r,placement:i,rects:a,middlewareData:o}=t,{offset:s=0,mainAxis:c=!0,crossAxis:l=!0}=ae(e,t),u={x:n,y:r},d=ue(i),f=ce(d),p=u[f],m=u[d],h=ae(s,t),g=typeof h==`number`?{mainAxis:h,crossAxis:0}:{mainAxis:h.mainAxis??0,crossAxis:h.crossAxis??0};if(c){let e=f===`y`?`height`:`width`,t=a.reference[f]-a.floating[e]+g.mainAxis,n=a.reference[f]+a.reference[e]-g.mainAxis;pn&&(p=n)}if(l){let e=f===`y`?`width`:`height`,t=Pe.has(oe(i)),n=a.reference[d]-a.floating[e]+(t&&o.offset?.[d]||0)+(t?0:g.crossAxis),r=a.reference[d]+a.reference[e]+(t?0:o.offset?.[d]||0)-(t?g.crossAxis:0);mr&&(m=r)}return{[f]:p,[d]:m}}}},ze=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){let{placement:n,rects:r,platform:i,elements:a}=t,{apply:o=()=>{},...s}=ae(e,t),c=await i.detectOverflow(t,s),l=oe(n),u=se(n),d=ue(n)===`y`,{width:f,height:p}=r.floating,m,h;l===`top`||l===`bottom`?(m=l,h=u===(await(i.isRTL==null?void 0:i.isRTL(a.floating))?`start`:`end`)?`left`:`right`):(h=l,m=u===`end`?`top`:`bottom`);let g=p-c.top-c.bottom,_=f-c.left-c.right,v=M(p-c[m],g),y=M(f-c[h],_),b=t.middlewareData.shift,x=!b,S=v,C=y;b!=null&&b.enabled.x&&(C=_),b!=null&&b.enabled.y&&(S=g),x&&!u&&(d?C=f-2*N(c.left,c.right):S=p-2*N(c.top,c.bottom)),await o({...t,availableWidth:C,availableHeight:S});let w=await i.getDimensions(a.floating);return f!==w.width||p!==w.height?{reset:{rects:!0}}:{}}}};function Be(){return typeof window<`u`}function Ve(e){return We(e)?(e.nodeName||``).toLowerCase():`#document`}function He(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Ue(e){return((We(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function We(e){return Be()?e instanceof Node||e instanceof He(e).Node:!1}function Ge(e){return Be()?e instanceof Element||e instanceof He(e).Element:!1}function Ke(e){return Be()?e instanceof HTMLElement||e instanceof He(e).HTMLElement:!1}function qe(e){return!Be()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof He(e).ShadowRoot}function Je(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=at(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function Ye(e){return/^(table|td|th)$/.test(Ve(e))}function Xe(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ze=/transform|translate|scale|rotate|perspective|filter/,Qe=/paint|layout|strict|content/,$e=e=>!!e&&e!==`none`,et;function tt(e){let t=Ge(e)?at(e):e;return $e(t.transform)||$e(t.translate)||$e(t.scale)||$e(t.rotate)||$e(t.perspective)||!rt()&&($e(t.backdropFilter)||$e(t.filter))||Ze.test(t.willChange||``)||Qe.test(t.contain||``)}function nt(e){let t=st(e);for(;Ke(t)&&!it(t);){if(tt(t))return t;if(Xe(t))return null;t=st(t)}return null}function rt(){return et??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),et}function it(e){return/^(html|body|#document)$/.test(Ve(e))}function at(e){return He(e).getComputedStyle(e)}function ot(e){return Ge(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function st(e){if(Ve(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||qe(e)&&e.host||Ue(e);return qe(t)?t.host:t}function ct(e){let t=st(e);return it(t)?(e.ownerDocument||e).body:Ke(t)&&Je(t)?t:ct(t)}function lt(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=ct(e),i=r===e.ownerDocument?.body,a=He(r);if(i){let e=ut(a);return t.concat(a,a.visualViewport||[],Je(r)?r:[],e&&n?lt(e):[])}else return t.concat(r,lt(r,[],n))}function ut(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function dt(e){let t=at(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=Ke(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=ee(n)!==a||ee(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function ft(e){return Ge(e)?e:e.contextElement}function pt(e){let t=ft(e);if(!Ke(t))return ne(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=dt(t),o=(a?ee(n.width):n.width)/r,s=(a?ee(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var mt=ne(0);function ht(e){let t=He(e);return!rt()||!t.visualViewport?mt:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function gt(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===He(e)}function _t(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=ft(e),o=ne(1);t&&(r?Ge(r)&&(o=pt(r)):o=pt(e));let s=gt(a,n,r)?ht(a):ne(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a&&r){let e=He(a),t=Ge(r)?He(r):r,n=e,i=ut(n);for(;i&&t!==n;){let e=pt(i),t=i.getBoundingClientRect(),r=at(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=He(i),i=ut(n)}}return we({width:u,height:d,x:c,y:l})}function vt(e,t){let n=ot(e).scrollLeft;return t?t.left+n:_t(Ue(e)).left+n}function yt(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-vt(e,n),y:n.top+t.scrollTop}}function bt(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=Ue(r),s=t?Xe(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=ne(1),u=ne(0),d=Ke(r);if((d||!a)&&((Ve(r)!==`body`||Je(o))&&(c=ot(r)),d)){let e=_t(r);l=pt(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?yt(o,c):ne(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function xt(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function St(e){let t=ot(e),n=e.ownerDocument.body,r=N(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),i=N(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+vt(e),o=-t.scrollTop;return at(n).direction===`rtl`&&(a+=N(e.clientWidth,n.clientWidth)-r),{width:r,height:i,x:a,y:o}}var Ct=25;function wt(e,t,n){n===void 0&&(n=`viewport`);let r=n===`layoutViewport`,i=He(e),a=Ue(e),o=i.visualViewport,s=a.clientWidth,c=a.clientHeight,l=0,u=0;if(o){let e=!rt()||t===`fixed`;r?e||(l=-o.offsetLeft,u=-o.offsetTop):(s=o.width,c=o.height,e&&(l=o.offsetLeft,u=o.offsetTop))}if(vt(a)<=0){let e=a.ownerDocument,t=e.body,n=getComputedStyle(t),r=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,i=Math.abs(a.clientWidth-t.clientWidth-r),o=getComputedStyle(a).scrollbarGutter===`stable both-edges`?i/2:i;o<=Ct&&(s-=o)}return{width:s,height:c,x:l,y:u}}function Tt(e,t){let n=_t(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=pt(e);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Et(e,t,n){let r;if(t===`viewport`||t===`layoutViewport`)r=wt(e,n,t);else if(t===`document`)r=St(Ue(e));else if(Ge(t))r=Tt(t,n);else{let n=ht(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return we(r)}function Dt(e,t){let n=t.get(e);if(n)return n;let r=lt(e,[],!1).filter(e=>Ge(e)&&Ve(e)!==`body`),i=null,a=at(e).position===`fixed`,o=a?st(e):e;for(;Ge(o)&&!it(o);){let e=at(o),t=tt(o),n=i?i.position:a?`fixed`:``;!t&&(n===`fixed`||n===`absolute`&&e.position===`static`)?r=r.filter(e=>e!==o):i=e,o=st(o)}return t.set(e,r),r}function Ot(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Xe(t)?[]:Dt(t,this._c):[].concat(n),r],o=Et(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{s(!1,1e-7)},1e3)}y=!1}try{r=new IntersectionObserver(b,{...v,root:a.ownerDocument})}catch{r=new IntersectionObserver(b,v)}r.observe(e)}let c=He(e),l=()=>s(n);return c.addEventListener(`resize`,l),s(!0),()=>{c.removeEventListener(`resize`,l),o()}}function zt(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=ft(e),u=i||a?[...l?lt(l):[],...t?lt(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n),a&&e.addEventListener(`resize`,n)});let d=l&&s?Rt(l,n,a):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?_t(e):null;c&&g();function g(){let t=_t(e);h&&!Lt(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var Bt=Ie,Vt=Le,Ht=Ae,Ut=ze,Wt=Ne,Gt=ke,Kt=Re,qt=(e,t,n)=>{let r=new Map,i=n??{},a={...It,...i.platform,_c:r};return Oe(e,t,{...i,platform:a})},Jt=h(d(),1),Yt=typeof document<`u`?A.useLayoutEffect:function(){};function Xt(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e==`function`&&e.toString()===t.toString())return!0;let n,r,i;if(e&&t&&typeof e==`object`){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Xt(e[r],t[r]))return!1;return!0}if(i=Object.keys(e),n=i.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,i[r]))return!1;for(r=n;r--!==0;){let n=i[r];if(!(n===`_owner`&&e.$$typeof)&&!Xt(e[n],t[n]))return!1}return!0}return e!==e&&t!==t}function Zt(e){return typeof window>`u`?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Qt(e,t){let n=Zt(e);return Math.round(t*n)/n}function $t(e){let t=A.useRef(e);return Yt(()=>{t.current=e}),t}function en(e){e===void 0&&(e={});let{placement:t=`bottom`,strategy:n=`absolute`,middleware:r=[],platform:i,elements:{reference:a,floating:o}={},transform:s=!0,whileElementsMounted:c,open:l}=e,[u,d]=A.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,p]=A.useState(r);Xt(f,r)||p(r);let[m,h]=A.useState(null),[g,_]=A.useState(null),v=A.useCallback(e=>{e!==S.current&&(S.current=e,h(e))},[]),y=A.useCallback(e=>{e!==C.current&&(C.current=e,_(e))},[]),b=a||m,x=o||g,S=A.useRef(null),C=A.useRef(null),w=A.useRef(u),T=c!=null,E=$t(c),D=$t(i),O=$t(l),k=A.useCallback(()=>{if(!S.current||!C.current)return;let e={placement:t,strategy:n,middleware:f};D.current&&(e.platform=D.current),qt(S.current,C.current,e).then(e=>{let t={...e,isPositioned:O.current!==!1};j.current&&!Xt(w.current,t)&&(w.current=t,Jt.flushSync(()=>{d(t)}))})},[f,t,n,D,O]);Yt(()=>{l===!1&&w.current.isPositioned&&(w.current.isPositioned=!1,d(e=>({...e,isPositioned:!1})))},[l]);let j=A.useRef(!1);Yt(()=>(j.current=!0,()=>{j.current=!1}),[]),Yt(()=>{if(b&&(S.current=b),x&&(C.current=x),b&&x){if(E.current)return E.current(b,x,k);k()}},[b,x,k,E,T]);let M=A.useMemo(()=>({reference:S,floating:C,setReference:v,setFloating:y}),[v,y]),N=A.useMemo(()=>({reference:b,floating:x}),[b,x]),ee=A.useMemo(()=>{let e={position:n,left:0,top:0};if(!N.floating)return e;let t=Qt(N.floating,u.x),r=Qt(N.floating,u.y);return s?{...e,transform:`translate(`+t+`px, `+r+`px)`,...Zt(N.floating)>=1.5&&{willChange:`transform`}}:{position:n,left:t,top:r}},[n,s,N.floating,u.x,u.y]);return A.useMemo(()=>({...u,update:k,refs:M,elements:N,floatingStyles:ee}),[u,k,M,N,ee])}var tn=e=>{function t(e){return{}.hasOwnProperty.call(e,`current`)}return{name:`arrow`,options:e,fn(n){let{element:r,padding:i}=typeof e==`function`?e(n):e;return r&&t(r)?r.current==null?{}:Gt({element:r.current,padding:i}).fn(n):r?Gt({element:r,padding:i}).fn(n):{}}}},nn=(e,t)=>{let n=Bt(e);return{name:n.name,fn:n.fn,options:[e,t]}},rn=(e,t)=>{let n=Vt(e);return{name:n.name,fn:n.fn,options:[e,t]}},an=(e,t)=>({fn:Kt(e).fn,options:[e,t]}),on=(e,t)=>{let n=Ht(e);return{name:n.name,fn:n.fn,options:[e,t]}},sn=(e,t)=>{let n=Ut(e);return{name:n.name,fn:n.fn,options:[e,t]}},cn=(e,t)=>{let n=Wt(e);return{name:n.name,fn:n.fn,options:[e,t]}},ln=(e,t)=>{let n=tn(e);return{name:n.name,fn:n.fn,options:[e,t]}};function un(e){let[t,n]=A.useState(void 0);return s(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});let t=new ResizeObserver(t=>{if(!Array.isArray(t)||!t.length)return;let r=t[0],i,a;if(`borderBoxSize`in r){let e=r.borderBoxSize,t=Array.isArray(e)?e[0]:e;i=t.inlineSize,a=t.blockSize}else i=e.offsetWidth,a=e.offsetHeight;n({width:i,height:a})});return t.observe(e,{box:`border-box`}),()=>t.unobserve(e)}else n(void 0)},[e]),t}var P=e(),dn=Object.defineProperty,fn=(e,t)=>dn(e,`name`,{value:t,configurable:!0}),pn=`Popper`,[mn,hn]=i(pn),[gn,_n]=mn(pn),vn=fn(e=>{let{__scopePopper:t,children:n}=e,[r,i]=A.useState(null),[a,o]=A.useState(void 0);return(0,P.jsx)(gn,{scope:t,anchor:r,onAnchorChange:i,placementState:a,setPlacementState:o,children:n})},`Popper`),yn=`PopperAnchor`,bn=A.forwardRef(fn(function(e,t){let{__scopePopper:r,virtualRef:i,...a}=e,o=_n(yn,r),s=A.useRef(null),c=o.onAnchorChange,u=n(t,A.useCallback(e=>{s.current=e,e&&c(e)},[c])),d=A.useRef(null);A.useEffect(()=>{if(!i)return;let e=d.current;d.current=i.current,e!==d.current&&c(d.current)});let f=o.placementState&&Dn(o.placementState),p=f?.[0],m=f?.[1];return i?null:(0,P.jsx)(l.div,{"data-radix-popper-side":p,"data-radix-popper-align":m,...a,ref:u})},`PopperAnchor`)),xn=`PopperContent`,[Sn,Cn]=mn(xn),wn=A.forwardRef(fn(function(e,t){let{__scopePopper:r,side:i=`bottom`,sideOffset:a=0,align:o=`center`,alignOffset:u=0,arrowPadding:d=0,avoidCollisions:f=!0,collisionBoundary:p=[],collisionPadding:m=0,sticky:h=`partial`,hideWhenDetached:g=!1,updatePositionStrategy:_=`optimized`,onPlaced:v,...y}=e,b=_n(xn,r),[x,S]=A.useState(null),C=n(t,S),[w,T]=A.useState(null),E=un(w),D=E?.width??0,O=E?.height??0,k=i+(o===`center`?``:`-`+o),j=typeof m==`number`?m:{top:0,right:0,bottom:0,left:0,...m},M=Array.isArray(p)?p:[p],N=M.length>0,ee={padding:j,boundary:M.filter(Tn),altBoundary:N},{refs:te,floatingStyles:ne,placement:re,isPositioned:ie,middlewareData:ae}=en({strategy:`fixed`,placement:k,whileElementsMounted:fn((...e)=>zt(...e,{animationFrame:_===`always`}),`whileElementsMounted`),elements:{reference:b.anchor},middleware:[nn({mainAxis:a+O,alignmentAxis:u}),f&&rn({mainAxis:!0,crossAxis:!1,limiter:h===`partial`?an():void 0,...ee}),f&&on({...ee}),sn({...ee,apply:fn(({elements:e,rects:t,availableWidth:n,availableHeight:r})=>{let{width:i,height:a}=t.reference,o=e.floating.style;o.setProperty(`--radix-popper-available-width`,`${n}px`),o.setProperty(`--radix-popper-available-height`,`${r}px`),o.setProperty(`--radix-popper-anchor-width`,`${i}px`),o.setProperty(`--radix-popper-anchor-height`,`${a}px`)},`apply`)}),w&&ln({element:w,padding:d}),En({arrowWidth:D,arrowHeight:O}),g&&cn({strategy:`referenceHidden`,...ee,boundary:N?ee.boundary:void 0})]}),oe=b.setPlacementState;s(()=>(oe(re),()=>{oe(void 0)}),[re,oe]);let[se,ce]=Dn(re),le=c(v);s(()=>{ie&&le?.()},[ie,le]);let ue=ae.arrow?.x,de=ae.arrow?.y,fe=ae.arrow?.centerOffset!==0,[pe,me]=A.useState();return s(()=>{x&&me(window.getComputedStyle(x).zIndex)},[x]),(0,P.jsx)(`div`,{ref:te.setFloating,"data-radix-popper-content-wrapper":``,style:{...ne,transform:ie?ne.transform:`translate(0, -200%)`,minWidth:`max-content`,zIndex:pe,"--radix-popper-transform-origin":[ae.transformOrigin?.x,ae.transformOrigin?.y].join(` `),...ae.hide?.referenceHidden&&{visibility:`hidden`,pointerEvents:`none`}},dir:e.dir,children:(0,P.jsx)(Sn,{scope:r,placedSide:se,placedAlign:ce,onArrowChange:T,arrowX:ue,arrowY:de,shouldHideArrow:fe,children:(0,P.jsx)(l.div,{"data-side":se,"data-align":ce,...y,ref:C,style:{...y.style,animation:ie?y.style?.animation:`none`}})})})},`PopperContent`));function Tn(e){return e!==null}fn(Tn,`isNotNull`);var En=fn(e=>({name:`transformOrigin`,options:e,fn(t){let{placement:n,rects:r,middlewareData:i}=t,a=i.arrow?.centerOffset!==0,o=a?0:e.arrowWidth,s=a?0:e.arrowHeight,[c,l]=Dn(n),u={start:`0%`,center:`50%`,end:`100%`}[l],d=(i.arrow?.x??0)+o/2,f=(i.arrow?.y??0)+s/2,p=``,m=``;return c===`bottom`?(p=a?u:`${d}px`,m=`${-s}px`):c===`top`?(p=a?u:`${d}px`,m=`${r.floating.height+s}px`):c===`right`?(p=`${-s}px`,m=a?u:`${f}px`):c===`left`&&(p=`${r.floating.width+s}px`,m=a?u:`${f}px`),{data:{x:p,y:m}}}}),`transformOrigin`);function Dn(e){let[t,n=`center`]=e.split(`-`);return[t,n]}fn(Dn,`getSideAndAlignFromPlacement`);var On=vn,kn=bn,An=wn,jn=Object.defineProperty,Mn=(e,t)=>jn(e,`name`,{value:t,configurable:!0}),Nn=Object.freeze({position:`absolute`,border:0,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,wordWrap:`normal`}),Pn=A.forwardRef(Mn(function(e,t){return(0,P.jsx)(l.span,{...e,ref:t,style:{...Nn,...e.style}})},`VisuallyHidden`)),Fn=Object.defineProperty,In=(e,t)=>Fn(e,`name`,{value:t,configurable:!0}),[Ln,Rn]=i(`Tooltip`,[hn]),zn=hn(),Bn=`TooltipProvider`,Vn=700,Hn=`tooltip.open`,[Un,Wn]=Ln(Bn),Gn=In(e=>{let{__scopeTooltip:t,delayDuration:n=Vn,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=A.useRef(!0),s=A.useRef(!1),c=A.useRef(0);return A.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,P.jsx)(Un,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:A.useCallback(()=>{r<=0||(window.clearTimeout(c.current),o.current=!1)},[r]),onClose:A.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r))},[r]),isPointerInTransitRef:s,onPointerInTransitChange:A.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})},`TooltipProvider`),Kn=`Tooltip`,[qn,Jn]=Ln(Kn),Yn=In(e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:o,delayDuration:s}=e,c=Wn(Kn,e.__scopeTooltip),l=zn(t),[u,d]=A.useState(null),[f,p]=A.useState(void 0),m=S(),h=A.useRef(0),g=o??c.disableHoverableContent,_=s??c.delayDuration,v=A.useRef(!1),[y,b]=C({prop:r,defaultProp:i??!1,onChange:In(e=>{e?(c.onOpen(),document.dispatchEvent(new CustomEvent(Hn))):c.onClose(),a?.(e)},`onChange`),caller:Kn}),x=A.useMemo(()=>y?v.current?`delayed-open`:`instant-open`:`closed`,[y]),w=A.useCallback(()=>{window.clearTimeout(h.current),h.current=0,v.current=!1,b(!0)},[b]),T=A.useCallback(()=>{window.clearTimeout(h.current),h.current=0,b(!1)},[b]),E=A.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{v.current=!0,b(!0),h.current=0},_)},[_,b]);A.useEffect(()=>()=>{h.current&&=(window.clearTimeout(h.current),0)},[]);let D=f??m;return(0,P.jsx)(On,{...l,children:(0,P.jsx)(qn,{scope:t,contentId:D,setContentId:p,open:y,stateAttribute:x,trigger:u,onTriggerChange:d,onTriggerEnter:A.useCallback(()=>{c.isOpenDelayedRef.current?E():w()},[c.isOpenDelayedRef,E,w]),onTriggerLeave:A.useCallback(()=>{g?T():(window.clearTimeout(h.current),h.current=0)},[T,g]),onOpen:w,onClose:T,disableHoverableContent:g,children:n})})},`Tooltip`),Xn=`TooltipTrigger`,Zn=A.forwardRef(In(function(e,t){let{__scopeTooltip:i,...a}=e,o=Jn(Xn,i),s=Wn(Xn,i),c=zn(i),u=n(t,A.useRef(null),o.onTriggerChange),d=A.useRef(!1),f=A.useRef(!1),p=A.useCallback(()=>d.current=!1,[]);return A.useEffect(()=>()=>document.removeEventListener(`pointerup`,p),[p]),(0,P.jsx)(kn,{asChild:!0,...c,children:(0,P.jsx)(l.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...a,ref:u,onPointerMove:r(e.onPointerMove,e=>{e.pointerType!==`touch`&&!f.current&&!s.isPointerInTransitRef.current&&(o.onTriggerEnter(),f.current=!0)}),onPointerLeave:r(e.onPointerLeave,()=>{o.onTriggerLeave(),f.current=!1}),onPointerDown:r(e.onPointerDown,()=>{o.open&&o.onClose(),d.current=!0,document.addEventListener(`pointerup`,p,{once:!0})}),onFocus:r(e.onFocus,()=>{d.current||o.onOpen()}),onBlur:r(e.onBlur,o.onClose),onClick:r(e.onClick,o.onClose)})})},`TooltipTrigger`)),Qn=`TooltipPortal`,[$n,er]=Ln(Qn,{forceMount:void 0}),tr=In(e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=Jn(Qn,t);return(0,P.jsx)($n,{scope:t,forceMount:n,children:(0,P.jsx)(w,{present:n||a.open,children:(0,P.jsx)(m,{asChild:!0,container:i,children:r})})})},`TooltipPortal`),nr=`TooltipContent`,rr=A.forwardRef(In(function(e,t){let n=er(nr,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=Jn(nr,e.__scopeTooltip);return(0,P.jsx)(w,{present:r||o.open,children:o.disableHoverableContent?(0,P.jsx)(or,{side:i,...a,ref:t}):(0,P.jsx)(ir,{side:i,...a,ref:t})})},`TooltipContent`)),ir=A.forwardRef(In(function(e,t){let r=Jn(nr,e.__scopeTooltip),i=Wn(nr,e.__scopeTooltip),a=A.useRef(null),o=n(t,a),[s,c]=A.useState(null),{trigger:l,onClose:u}=r,d=a.current,{onPointerInTransitChange:f}=i,p=A.useCallback(()=>{c(null),f(!1)},[f]),m=A.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=cr(r,sr(r,n.getBoundingClientRect())),a=lr(t.getBoundingClientRect()),o=dr([...i,...a]);c(o),f(!0)},[f]);return A.useEffect(()=>()=>p(),[p]),A.useEffect(()=>{if(l&&d){let e=In(e=>m(e,d),`handleTriggerLeave`),t=In(e=>m(e,l),`handleContentLeave`);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),A.useEffect(()=>{if(s){let e=In(e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!ur(n,s);r?p():i&&(p(),u())},`handleTrackPointerGrace`);return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,s,u,p]),(0,P.jsx)(or,{...e,ref:o})},`TooltipContentHoverable`)),ar=o(`TooltipContent`),or=A.forwardRef(In(function(e,t){let{__scopeTooltip:n,children:r,"aria-label":i,id:a,onEscapeKeyDown:o,onPointerDownOutside:c,...l}=e,u=Jn(nr,n),d=zn(n),{onClose:f}=u;A.useEffect(()=>(document.addEventListener(Hn,f),()=>document.removeEventListener(Hn,f)),[f]),A.useEffect(()=>{if(u.trigger){let e=In(e=>{e.target instanceof Node&&e.target.contains(u.trigger)&&f()},`handleScroll`);return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[u.trigger,f]);let{setContentId:m}=u;return s(()=>(m(a),()=>{m(void 0)}),[a,m]),(0,P.jsx)(p,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:c,onFocusOutside:e=>e.preventDefault(),onDismiss:f,children:(0,P.jsxs)(An,{"data-state":u.stateAttribute,role:i?void 0:`tooltip`,id:i?void 0:u.contentId,...d,...l,ref:t,style:{...l.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,P.jsx)(ar,{children:r}),i?(0,P.jsx)(Pn,{id:u.contentId,role:`tooltip`,children:i}):null]})})},`TooltipContentImpl`));function sr(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}In(sr,`getExitSideFromRect`);function cr(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}In(cr,`getPaddedExitPoints`);function lr(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}In(lr,`getPointsFromRect`);function ur(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;er!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}In(ur,`isPointInPolygon`);function dr(e){let t=e.slice();return t.sort((e,t)=>e.xt.x?1:e.yt.y)),fr(t)}In(dr,`getHull`);function fr(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}In(fr,`getHullPresorted`);var pr=Gn,mr=Yn,hr=Zn,gr=tr,_r=rr,vr=pr,yr=mr,br=hr,xr=(0,A.forwardRef)(({className:e,sideOffset:t=6,...n},r)=>(0,P.jsx)(gr,{children:(0,P.jsx)(_r,{ref:r,sideOffset:t,className:[`tooltip-content`,e].filter(Boolean).join(` `),...n})}));xr.displayName=`TooltipContent`;function Sr({rows:e}){let[t,n]=(0,A.useState)(()=>new Set),r=[...e].sort((e,t)=>t.hit_count-e.hit_count||e.ip.localeCompare(t.ip));if(r.length===0)return(0,P.jsx)(`p`,{className:`section-empty`,children:`IP reputation rows appear after an egress IP is observed.`});let i=e=>n(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n});return(0,P.jsxs)(vr,{delayDuration:250,children:[(0,P.jsx)(`div`,{className:`ip-table-wrap`,children:(0,P.jsxs)(`table`,{className:`table ip-table`,children:[(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`col`,children:`IP`}),(0,P.jsx)(`th`,{scope:`col`,children:`Category`}),(0,P.jsx)(`th`,{scope:`col`,children:`Country`}),(0,P.jsx)(`th`,{scope:`col`,children:`ISP`}),(0,P.jsx)(`th`,{scope:`col`,children:`ASN`}),(0,P.jsx)(`th`,{scope:`col`,children:`Risk`}),(0,P.jsx)(`th`,{scope:`col`,children:`GreyNoise`}),(0,P.jsx)(`th`,{scope:`col`,children:`DNSBL`}),(0,P.jsx)(`th`,{scope:`col`,children:`First seen`}),(0,P.jsx)(`th`,{scope:`col`,children:`Last seen`}),(0,P.jsx)(`th`,{scope:`col`,children:`Hits`})]})}),(0,P.jsx)(`tbody`,{children:r.map(e=>(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`row`,className:`mono`,children:e.ip}),(0,P.jsx)(`td`,{children:(0,P.jsx)(wr,{category:e.category})}),(0,P.jsx)(`td`,{children:e.country||`—`}),(0,P.jsx)(`td`,{children:(0,P.jsx)(Cr,{label:`Full ISP for ${e.ip}`,value:e.isp||`—`})}),(0,P.jsx)(`td`,{children:(0,P.jsx)(Cr,{label:`Full ASN for ${e.ip}`,value:e.asn||`—`})}),(0,P.jsx)(`td`,{children:(0,P.jsx)(Tr,{score:e.risk_score})}),(0,P.jsx)(`td`,{children:(0,P.jsx)(Cr,{label:`Full GreyNoise classification for ${e.ip}`,value:e.greynoise_class||`—`})}),(0,P.jsx)(`td`,{children:(0,P.jsx)(Cr,{label:`DNSBL details for ${e.ip}`,value:e.dnsbl_listed?`Listed: ${e.dnsbl_hits.join(`, `)||`unspecified list`}`:`Not listed`})}),(0,P.jsx)(`td`,{children:v(e.first_seen)}),(0,P.jsx)(`td`,{children:v(e.last_seen)}),(0,P.jsx)(`td`,{className:`numeric`,children:e.hit_count})]},e.ip))})]})}),(0,P.jsx)(`div`,{className:`ip-records`,children:r.map(e=>{let n=t.has(e.ip);return(0,P.jsxs)(`article`,{className:`ip-record`,children:[(0,P.jsxs)(`div`,{className:`ip-record-summary`,children:[(0,P.jsx)(`strong`,{className:`mono`,children:e.ip}),(0,P.jsx)(wr,{category:e.category}),(0,P.jsx)(Tr,{score:e.risk_score})]}),(0,P.jsxs)(`button`,{type:`button`,className:`ip-details-trigger`,"aria-expanded":n,"aria-controls":`ip-${Dr(e.ip)}-details`,onClick:()=>i(e.ip),children:[n?(0,P.jsx)(y,{size:16,"aria-hidden":`true`}):(0,P.jsx)(T,{size:16,"aria-hidden":`true`}),` `,n?`Hide`:`Show`,` details for `,e.ip]}),n&&(0,P.jsxs)(`dl`,{id:`ip-${Dr(e.ip)}-details`,className:`ip-details`,children:[(0,P.jsx)(Er,{label:`Country`,value:e.country||`—`}),(0,P.jsx)(Er,{label:`ISP`,value:e.isp||`—`}),(0,P.jsx)(Er,{label:`ASN`,value:e.asn||`—`}),(0,P.jsx)(Er,{label:`GreyNoise`,value:e.greynoise_class||`—`}),(0,P.jsx)(Er,{label:`DNSBL`,value:e.dnsbl_listed?`Listed: ${e.dnsbl_hits.join(`, `)||`unspecified list`}`:`Not listed`}),(0,P.jsx)(Er,{label:`First seen`,value:v(e.first_seen)}),(0,P.jsx)(Er,{label:`Last seen`,value:v(e.last_seen)}),(0,P.jsx)(Er,{label:`Hits`,value:String(e.hit_count)})]})]},e.ip)})})]})}function Cr({value:e,label:t}){return(0,P.jsxs)(yr,{children:[(0,P.jsx)(br,{asChild:!0,children:(0,P.jsxs)(`button`,{type:`button`,className:`clipped-value`,"aria-label":t,children:[e,(0,P.jsx)(D,{size:13,"aria-hidden":`true`})]})}),(0,P.jsx)(xr,{side:`top`,children:e})]})}function wr({category:e}){return(0,P.jsxs)(`span`,{className:`category-label category-${[`mobile`,`residential`,`datacenter`].includes(e)?e:`unknown`}`,children:[(0,P.jsx)(`span`,{className:`category-dot`,"aria-hidden":`true`}),e||`unknown`]})}function Tr({score:e}){if(e==null)return(0,P.jsx)(`span`,{className:`risk-label risk-unknown`,children:`Unknown`});let t=e>=70?`High`:e>=40?`Elevated`:`Low`;return(0,P.jsxs)(`span`,{className:`risk-label risk-${t.toLowerCase()}`,children:[t,` `,e]})}function Er({label:e,value:t}){return(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`dt`,{children:e}),(0,P.jsx)(`dd`,{children:t})]})}function Dr(e){return e.replace(/[^a-zA-Z0-9_-]/g,`-`)}var Or=`dangerouslySetInnerHTML.onCopy.onCopyCapture.onCut.onCutCapture.onPaste.onPasteCapture.onCompositionEnd.onCompositionEndCapture.onCompositionStart.onCompositionStartCapture.onCompositionUpdate.onCompositionUpdateCapture.onFocus.onFocusCapture.onBlur.onBlurCapture.onChange.onChangeCapture.onBeforeInput.onBeforeInputCapture.onInput.onInputCapture.onReset.onResetCapture.onSubmit.onSubmitCapture.onInvalid.onInvalidCapture.onLoad.onLoadCapture.onError.onErrorCapture.onKeyDown.onKeyDownCapture.onKeyPress.onKeyPressCapture.onKeyUp.onKeyUpCapture.onAbort.onAbortCapture.onCanPlay.onCanPlayCapture.onCanPlayThrough.onCanPlayThroughCapture.onDurationChange.onDurationChangeCapture.onEmptied.onEmptiedCapture.onEncrypted.onEncryptedCapture.onEnded.onEndedCapture.onLoadedData.onLoadedDataCapture.onLoadedMetadata.onLoadedMetadataCapture.onLoadStart.onLoadStartCapture.onPause.onPauseCapture.onPlay.onPlayCapture.onPlaying.onPlayingCapture.onProgress.onProgressCapture.onRateChange.onRateChangeCapture.onSeeked.onSeekedCapture.onSeeking.onSeekingCapture.onStalled.onStalledCapture.onSuspend.onSuspendCapture.onTimeUpdate.onTimeUpdateCapture.onVolumeChange.onVolumeChangeCapture.onWaiting.onWaitingCapture.onAuxClick.onAuxClickCapture.onClick.onClickCapture.onContextMenu.onContextMenuCapture.onDoubleClick.onDoubleClickCapture.onDrag.onDragCapture.onDragEnd.onDragEndCapture.onDragEnter.onDragEnterCapture.onDragExit.onDragExitCapture.onDragLeave.onDragLeaveCapture.onDragOver.onDragOverCapture.onDragStart.onDragStartCapture.onDrop.onDropCapture.onMouseDown.onMouseDownCapture.onMouseEnter.onMouseLeave.onMouseMove.onMouseMoveCapture.onMouseOut.onMouseOutCapture.onMouseOver.onMouseOverCapture.onMouseUp.onMouseUpCapture.onSelect.onSelectCapture.onTouchCancel.onTouchCancelCapture.onTouchEnd.onTouchEndCapture.onTouchMove.onTouchMoveCapture.onTouchStart.onTouchStartCapture.onPointerDown.onPointerDownCapture.onPointerMove.onPointerMoveCapture.onPointerUp.onPointerUpCapture.onPointerCancel.onPointerCancelCapture.onPointerEnter.onPointerEnterCapture.onPointerLeave.onPointerLeaveCapture.onPointerOver.onPointerOverCapture.onPointerOut.onPointerOutCapture.onGotPointerCapture.onGotPointerCaptureCapture.onLostPointerCapture.onLostPointerCaptureCapture.onScroll.onScrollCapture.onWheel.onWheelCapture.onAnimationStart.onAnimationStartCapture.onAnimationEnd.onAnimationEndCapture.onAnimationIteration.onAnimationIterationCapture.onTransitionEnd.onTransitionEndCapture`.split(`.`);function kr(e){return typeof e==`string`&&Or.includes(e)}var Ar=new Set(`aria-activedescendant.aria-atomic.aria-autocomplete.aria-busy.aria-checked.aria-colcount.aria-colindex.aria-colspan.aria-controls.aria-current.aria-describedby.aria-details.aria-disabled.aria-errormessage.aria-expanded.aria-flowto.aria-haspopup.aria-hidden.aria-invalid.aria-keyshortcuts.aria-label.aria-labelledby.aria-level.aria-live.aria-modal.aria-multiline.aria-multiselectable.aria-orientation.aria-owns.aria-placeholder.aria-posinset.aria-pressed.aria-readonly.aria-relevant.aria-required.aria-roledescription.aria-rowcount.aria-rowindex.aria-rowspan.aria-selected.aria-setsize.aria-sort.aria-valuemax.aria-valuemin.aria-valuenow.aria-valuetext.className.color.height.id.lang.max.media.method.min.name.style.target.width.role.tabIndex.accentHeight.accumulate.additive.alignmentBaseline.allowReorder.alphabetic.amplitude.arabicForm.ascent.attributeName.attributeType.autoReverse.azimuth.baseFrequency.baselineShift.baseProfile.bbox.begin.bias.by.calcMode.capHeight.clip.clipPath.clipPathUnits.clipRule.colorInterpolation.colorInterpolationFilters.colorProfile.colorRendering.contentScriptType.contentStyleType.cursor.cx.cy.d.decelerate.descent.diffuseConstant.direction.display.divisor.dominantBaseline.dur.dx.dy.edgeMode.elevation.enableBackground.end.exponent.externalResourcesRequired.fill.fillOpacity.fillRule.filter.filterRes.filterUnits.floodColor.floodOpacity.focusable.fontFamily.fontSize.fontSizeAdjust.fontStretch.fontStyle.fontVariant.fontWeight.format.from.fx.fy.g1.g2.glyphName.glyphOrientationHorizontal.glyphOrientationVertical.glyphRef.gradientTransform.gradientUnits.hanging.horizAdvX.horizOriginX.href.ideographic.imageRendering.in2.in.intercept.k1.k2.k3.k4.k.kernelMatrix.kernelUnitLength.kerning.keyPoints.keySplines.keyTimes.lengthAdjust.letterSpacing.lightingColor.limitingConeAngle.local.markerEnd.markerHeight.markerMid.markerStart.markerUnits.markerWidth.mask.maskContentUnits.maskUnits.mathematical.mode.numOctaves.offset.opacity.operator.order.orient.orientation.origin.overflow.overlinePosition.overlineThickness.paintOrder.panose1.pathLength.patternContentUnits.patternTransform.patternUnits.pointerEvents.pointsAtX.pointsAtY.pointsAtZ.preserveAlpha.preserveAspectRatio.primitiveUnits.r.radius.refX.refY.renderingIntent.repeatCount.repeatDur.requiredExtensions.requiredFeatures.restart.result.rotate.rx.ry.seed.shapeRendering.slope.spacing.specularConstant.specularExponent.speed.spreadMethod.startOffset.stdDeviation.stemh.stemv.stitchTiles.stopColor.stopOpacity.strikethroughPosition.strikethroughThickness.string.stroke.strokeDasharray.strokeDashoffset.strokeLinecap.strokeLinejoin.strokeMiterlimit.strokeOpacity.strokeWidth.surfaceScale.systemLanguage.tableValues.targetX.targetY.textAnchor.textDecoration.textLength.textRendering.to.transform.u1.u2.underlinePosition.underlineThickness.unicode.unicodeBidi.unicodeRange.unitsPerEm.vAlphabetic.values.vectorEffect.version.vertAdvY.vertOriginX.vertOriginY.vHanging.vIdeographic.viewTarget.visibility.vMathematical.widths.wordSpacing.writingMode.x1.x2.x.xChannelSelector.xHeight.xlinkActuate.xlinkArcrole.xlinkHref.xlinkRole.xlinkShow.xlinkTitle.xlinkType.xmlBase.xmlLang.xmlns.xmlnsXlink.xmlSpace.y1.y2.y.yChannelSelector.z.zoomAndPan.ref.key.angle`.split(`.`));function jr(e){return typeof e==`string`&&Ar.has(e)}function Mr(e){return typeof e==`string`&&e.startsWith(`data-`)}function Nr(e){if(typeof e!=`object`||!e)return{};var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(jr(n)||Mr(n))&&(t[n]=e[n]);return t}function Pr(e){if(e==null)return null;if((0,A.isValidElement)(e)&&typeof e.props==`object`&&e.props!==null){var t=e.props;return Nr(t)}return typeof e==`object`&&!Array.isArray(e)?Nr(e):null}function Fr(e){var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(jr(n)||Mr(n)||kr(n))&&(t[n]=e[n]);return t}function Ir(e){return e==null?null:(0,A.isValidElement)(e)?Fr(e.props):typeof e==`object`&&!Array.isArray(e)?Fr(e):null}var Lr=[`children`,`width`,`height`,`viewBox`,`className`,`style`,`title`,`desc`];function Rr(){return Rr=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,i=e.width,a=e.height,o=e.viewBox,s=e.className,c=e.style,l=e.title,u=e.desc,d=zr(e,Lr),f=o||{width:i,height:a,x:0,y:0},p=t(`recharts-surface`,s);return A.createElement(`svg`,Rr({},Fr(d),{className:p,width:i,height:a,style:c,viewBox:`${f.x} ${f.y} ${f.width} ${f.height}`,ref:n}),A.createElement(`title`,null,l),A.createElement(`desc`,null,u),r)}),Hr=[`children`,`className`];function Ur(){return Ur=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,i=e.className,a=Wr(e,Hr),o=t(`recharts-layer`,i);return A.createElement(`g`,Ur({className:o},Fr(a),{ref:n}),r)});function Kr(e){return e===`__proto__`}function qr(e){switch(typeof e){case`number`:case`symbol`:return!1;case`string`:return e.includes(`.`)||e.includes(`[`)||e.includes(`]`)}}function Jr(e){return typeof e==`string`||typeof e==`symbol`?e:Object.is(e?.valueOf?.(),-0)?`-0`:String(e)}function Yr(e){if(e==null)return``;if(typeof e==`string`)return e;if(Array.isArray(e))return e.map(Yr).join(`,`);let t=String(e);return t===`0`&&Object.is(Number(e),-0)?`-0`:t}function Xr(e){if(Array.isArray(e))return e.map(Jr);if(typeof e==`symbol`)return[e];e=Yr(e);let t=[],n=e.length;if(n===0)return t;let r=0,i=``,a=``,o=!1;for(e.charCodeAt(0)===46&&t.push(``);r1&&arguments[1]!==void 0?arguments[1]:$r),n=Math.round(e*t)/t;return Object.is(n,-0)?0:n}function ti(e){var t=[...arguments].slice(1);return e.reduce((e,n,r)=>{var i=t[r-1];return typeof i==`string`?e+i+n:i===void 0?e+n:e+ei(i)+n},``)}var ni=e=>e===0?0:e>0?1:-1,ri=e=>typeof e==`number`&&e!=+e,ii=e=>typeof e==`string`&&e.length>1&&e.indexOf(`%`)===e.length-1,I=e=>(typeof e==`number`||e instanceof Number)&&!ri(e),ai=e=>I(e)||typeof e==`string`,oi=0,si=e=>{var t=++oi;return`${e||``}${t}`},ci=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(!I(e)&&typeof e!=`string`)return n;var i;if(ii(e)){if(t==null)return n;var a=e.indexOf(`%`);i=t*parseFloat(e.slice(0,a))/100}else i=+e;return ri(i)&&(i=n),r&&t!=null&&i>t&&(i=t),i},li=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,n={},r=0;re&&(typeof t==`function`?t(e):Zr(e,t))===n)}var R=e=>e==null,di=e=>R(e)?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`;function fi(e){return e!=null}function pi(){}function mi(e){if(e)return{x:e.x,y:e.y,upperWidth:`upperWidth`in e?e.upperWidth:e.width,lowerWidth:`lowerWidth`in e?e.lowerWidth:e.width,width:e.width,height:e.height}}function hi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function gi(e){for(var t=1;t{var t=e.viewBox,n=e.position,r=e.offset,i=r===void 0?0:r,a=e.parentViewBox,o=e.clamp,s=mi(t),c=s.x,l=s.y,u=s.height,d=s.upperWidth,f=s.lowerWidth,p=c,m=c+(d-f)/2,h=(p+m)/2,g=(d+f)/2,_=p+d/2,v=u>=0?1:-1,y=v*i,b=v>0?`end`:`start`,x=v>0?`start`:`end`,S=d>=0?1:-1,C=S*i,w=S>0?`end`:`start`,T=S>0?`start`:`end`,E=a;if(n===`top`){var D={x:p+d/2,y:l-y,horizontalAnchor:`middle`,verticalAnchor:b};return o&&E&&(D.height=Math.max(l-E.y,0),D.width=d),D}if(n===`bottom`){var O={x:m+f/2,y:l+u+y,horizontalAnchor:`middle`,verticalAnchor:x};return o&&E&&(O.height=Math.max(E.y+E.height-(l+u),0),O.width=f),O}if(n===`left`){var k={x:h-C,y:l+u/2,horizontalAnchor:w,verticalAnchor:`middle`};return o&&E&&(k.width=Math.max(k.x-E.x,0),k.height=u),k}if(n===`right`){var A={x:h+g+C,y:l+u/2,horizontalAnchor:T,verticalAnchor:`middle`};return o&&E&&(A.width=Math.max(E.x+E.width-A.x,0),A.height=u),A}var j=o&&E?{width:g,height:u}:{};return n===`insideLeft`?gi({x:h+C,y:l+u/2,horizontalAnchor:T,verticalAnchor:`middle`},j):n===`insideRight`?gi({x:h+g-C,y:l+u/2,horizontalAnchor:w,verticalAnchor:`middle`},j):n===`insideTop`?gi({x:p+d/2,y:l+y,horizontalAnchor:`middle`,verticalAnchor:x},j):n===`insideBottom`?gi({x:m+f/2,y:l+u-y,horizontalAnchor:`middle`,verticalAnchor:b},j):n===`insideTopLeft`?gi({x:p+C,y:l+y,horizontalAnchor:T,verticalAnchor:x},j):n===`insideTopRight`?gi({x:p+d-C,y:l+y,horizontalAnchor:w,verticalAnchor:x},j):n===`insideBottomLeft`?gi({x:m+C,y:l+u-y,horizontalAnchor:T,verticalAnchor:b},j):n===`insideBottomRight`?gi({x:m+f-C,y:l+u-y,horizontalAnchor:w,verticalAnchor:b},j):n&&typeof n==`object`&&(I(n.x)||ii(n.x))&&(I(n.y)||ii(n.y))?gi({x:c+ci(n.x,g),y:l+ci(n.y,u),horizontalAnchor:`end`,verticalAnchor:`end`},j):gi({x:_,y:l+u/2,horizontalAnchor:`middle`,verticalAnchor:`middle`},j)},xi=[`top`,`left`,`right`,`bottom`];function Si(e){return e==null?!1:typeof e==`object`||xi.includes(e)}var Ci=(0,A.createContext)(null);function wi(e){return function(){return e}}var Ti=Math.PI,Ei=2*Ti,Di=1e-6,Oi=Ei-Di;function ki(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw Error(`invalid digits: ${e}`);if(t>15)return ki;let n=10**t;return function(e){this._+=e[0];for(let t=1,r=e.length;tDi)if(!(Math.abs(u*s-c*l)>Di)||!i)this._append`L${this._x1=e},${this._y1=t}`;else{let f=n-a,p=r-o,m=s*s+c*c,h=f*f+p*p,g=Math.sqrt(m),_=Math.sqrt(d),v=i*Math.tan((Ti-Math.acos((m+d-h)/(2*g*_)))/2),y=v/_,b=v/g;Math.abs(y-1)>Di&&this._append`L${e+y*l},${t+y*u}`,this._append`A${i},${i},0,0,${+(u*f>l*p)},${this._x1=e+b*s},${this._y1=t+b*c}`}}arc(e,t,n,r,i,a){if(e=+e,t=+t,n=+n,a=!!a,n<0)throw Error(`negative radius: ${n}`);let o=n*Math.cos(r),s=n*Math.sin(r),c=e+o,l=t+s,u=1^a,d=a?r-i:i-r;this._x1===null?this._append`M${c},${l}`:(Math.abs(this._x1-c)>Di||Math.abs(this._y1-l)>Di)&&this._append`L${c},${l}`,n&&(d<0&&(d=d%Ei+Ei),d>Oi?this._append`A${n},${n},0,1,${u},${e-o},${t-s}A${n},${n},0,1,${u},${this._x1=c},${this._y1=l}`:d>Di&&this._append`A${n},${n},0,${+(d>=Ti)},${u},${this._x1=e+n*Math.cos(i)},${this._y1=t+n*Math.sin(i)}`)}rect(e,t,n,r){this._append`M${this._x0=this._x1=+e},${this._y0=this._y1=+t}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}};function Mi(){return new ji}Mi.prototype=ji.prototype;function Ni(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{let e=Math.floor(n);if(!(e>=0))throw RangeError(`invalid digits: ${n}`);t=e}return e},()=>new ji(t)}Array.prototype.slice;function Pi(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function Fi(e){this._context=e}Fi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function Ii(e){return new Fi(e)}function Li(e){return e[0]}function Ri(e){return e[1]}function zi(e,t){var n=wi(!0),r=null,i=Ii,a=null,o=Ni(s);e=typeof e==`function`?e:e===void 0?Li:wi(e),t=typeof t==`function`?t:t===void 0?Ri:wi(t);function s(s){var c,l=(s=Pi(s)).length,u,d=!1,f;for(r??(a=i(f=o())),c=0;c<=l;++c)!(c=d;--f)s.point(_[f],v[f]);s.lineEnd(),s.areaEnd()}h&&(_[u]=+e(m,u,l),v[u]=+t(m,u,l),s.point(r?+r(m,u,l):_[u],n?+n(m,u,l):v[u]))}if(g)return s=null,g+``||null}function u(){return zi().defined(i).curve(o).context(a)}return l.x=function(t){return arguments.length?(e=typeof t==`function`?t:wi(+t),r=null,l):e},l.x0=function(t){return arguments.length?(e=typeof t==`function`?t:wi(+t),l):e},l.x1=function(e){return arguments.length?(r=e==null?null:typeof e==`function`?e:wi(+e),l):r},l.y=function(e){return arguments.length?(t=typeof e==`function`?e:wi(+e),n=null,l):t},l.y0=function(e){return arguments.length?(t=typeof e==`function`?e:wi(+e),l):t},l.y1=function(e){return arguments.length?(n=e==null?null:typeof e==`function`?e:wi(+e),l):n},l.lineX0=l.lineY0=function(){return u().x(e).y(t)},l.lineY1=function(){return u().x(e).y(n)},l.lineX1=function(){return u().x(r).y(t)},l.defined=function(e){return arguments.length?(i=typeof e==`function`?e:wi(!!e),l):i},l.curve=function(e){return arguments.length?(o=e,a!=null&&(s=o(a)),l):o},l.context=function(e){return arguments.length?(e==null?a=s=null:s=o(a=e),l):a},l}var Vi=class{constructor(e,t){this._context=e,this._x=t}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,t,e,t):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+t)/2,e,this._y0,e,t);break}this._x0=e,this._y0=t}};function Hi(e){return new Vi(e,!0)}function Ui(e){return new Vi(e,!1)}function Wi(){}function Gi(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Ki(e){this._context=e}Ki.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Gi(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Gi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function qi(e){return new Ki(e)}function Ji(e){this._context=e}Ji.prototype={areaStart:Wi,areaEnd:Wi,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Gi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Yi(e){return new Ji(e)}function Xi(e){this._context=e}Xi.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Gi(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Zi(e){return new Xi(e)}function Qi(e){this._context=e}Qi.prototype={areaStart:Wi,areaEnd:Wi,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function $i(e){return new Qi(e)}function ea(e){return e<0?-1:1}function ta(e,t,n){var r=e._x1-e._x0,i=t-e._x1,a=(e._y1-e._y0)/(r||i<0&&-0),o=(n-e._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(ea(a)+ea(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function na(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function ra(e,t,n){var r=e._x0,i=e._y0,a=e._x1,o=e._y1,s=(a-r)/3;e._context.bezierCurveTo(r+s,i+s*t,a-s,o-s*n,a,o)}function ia(e){this._context=e}ia.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:ra(this,this._t0,na(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,ra(this,na(this,n=ta(this,e,t)),n);break;default:ra(this,this._t0,n=ta(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function aa(e){this._context=new oa(e)}(aa.prototype=Object.create(ia.prototype)).point=function(e,t){ia.prototype.point.call(this,t,e)};function oa(e){this._context=e}oa.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,i,a){this._context.bezierCurveTo(t,e,r,n,a,i)}};function sa(e){return new ia(e)}function ca(e){return new aa(e)}function la(e){this._context=e}la.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=ua(e),i=ua(t),a=0,o=1;o=0;--t)i[t]=(o[t]-i[t+1])/a[t];for(a[n-1]=(e[n]+i[n-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}this._x=e,this._y=t}};function pa(e){return new fa(e,.5)}function ma(e){return new fa(e,0)}function ha(e){return new fa(e,1)}function ga(e,t){if((o=e.length)>1)for(var n=1,r,i,a=e[t[0]],o,s=a.length;n=0;)n[t]=t;return n}function va(e,t){return e[t]}function ya(e){let t=[];return t.key=e,t}function ba(){var e=wi([]),t=_a,n=ga,r=va;function i(i){var a=Array.from(e.apply(this,arguments),ya),o,s=a.length,c=-1,l;for(let e of i)for(o=0,++c;o0){for(var n,r,i=0,a=e[0].length,o;i0){for(var n=0,r=e[t[0]],i,a=r.length;n0)||!((a=(i=e[t[0]]).length)>0))){for(var n=0,r=1,i,a,o;r`radius`in e&&`startAngle`in e&&`endAngle`in e,Ta=(e,t)=>{if(!e||typeof e==`function`||typeof e==`boolean`)return null;var n=e;if((0,A.isValidElement)(e)&&(n=e.props),typeof n!=`object`&&typeof n!=`function`)return null;var r={};return Object.keys(n).forEach(e=>{kr(e)&&typeof n[e]==`function`&&(r[e]=t||(t=>n[e](n,t)))}),r},Ea=(e,t,n)=>r=>(e(t,n,r),null),Da=(e,t,n)=>{if(e===null||typeof e!=`object`&&typeof e!=`function`)return null;var r=null;return Object.keys(e).forEach(i=>{var a=e[i];kr(i)&&typeof a==`function`&&(r||={},r[i]=Ea(a,t,n))}),r};function Oa(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ka(e){for(var t=1;t(e[t]===void 0&&r[t]!==void 0&&(e[t]=r[t]),e),n)}function Pa(e,t){let n=new Map;for(let r=0;rObject.prototype.propertyIsEnumerable.call(e,t))}function Va(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var Ha=`[object RegExp]`,Ua=`[object String]`,Wa=`[object Number]`,Ga=`[object Boolean]`,Ka=`[object Arguments]`,qa=`[object Symbol]`,Ja=`[object Date]`,Ya=`[object Map]`,Xa=`[object Set]`,Za=`[object Array]`,Qa=`[object Function]`,$a=`[object ArrayBuffer]`,eo=`[object Object]`,to=`[object Error]`,no=`[object DataView]`,ro=`[object Uint8Array]`,io=`[object Uint8ClampedArray]`,ao=`[object Uint16Array]`,oo=`[object Uint32Array]`,so=`[object BigUint64Array]`,co=`[object Int8Array]`,lo=`[object Int16Array]`,uo=`[object Int32Array]`,fo=`[object BigInt64Array]`,po=`[object Float32Array]`,mo=`[object Float64Array]`,ho=typeof globalThis==`object`&&globalThis||typeof window==`object`&&window||typeof self==`object`&&self||typeof global==`object`&&global||(function(){return this})();function go(e){return ho.Buffer!==void 0&&ho.Buffer.isBuffer(e)}function _o(e,t){return vo(e,void 0,e,new Map,t)}function vo(e,t,n,r=new Map,i=void 0){let a=i?.(e,t,n,r);if(a!==void 0)return a;if(Ra(e))return e;if(r.has(e))return r.get(e);if(Array.isArray(e)){let t=Array(e.length);r.set(e,t);for(let a=0;avoid 0)}function To(e,t,n,r,i=!1){if(t===e)return!0;switch(typeof t){case`object`:return Eo(e,t,n,r);case`function`:return Object.keys(t).length>0?To(e,{...t},n,r,i):So(e,t);default:return Co(e)&&i?typeof t!=`string`||t===``:So(e,t)}}function Eo(e,t,n,r){if(t==null)return!0;if(Array.isArray(t))return Oo(e,t,n,r);if(t instanceof Map)return Do(e,t,n,r);if(t instanceof Set)return ko(e,t,n,r);let i=Object.keys(t);if(e==null||Ra(e))return i.length===0;if(i.length===0)return!0;if(r?.has(t))return r.get(t)===e;r?.set(t,e);try{for(let a=0;avoid 0)}function jo(e){return e=xo(e),t=>Ao(t,e)}function Mo(e,t){return _o(e,(n,r,i,a)=>{let o=t?.(n,r,i,a);if(o!==void 0)return o;if(typeof e==`object`){if(Va(e)===`[object Object]`&&typeof e.constructor!=`function`){let t={};return a.set(e,t),yo(t,e,i,a),t}switch(Object.prototype.toString.call(e)){case Wa:case Ua:case Ga:{let t=new e.constructor(e?.valueOf());return yo(t,e),t}case Ka:{let t={};return yo(t,e),t.length=e.length,t[Symbol.iterator]=e[Symbol.iterator],t}default:return}}})}function No(e){return Mo(e)}var Po=/^(?:0|[1-9]\d*)$/;function Fo(e,t=2**53-1){switch(typeof e){case`number`:return Number.isInteger(e)&&e>=0&&e=0}function Vo(e){return e!=null&&typeof e!=`function`&&Bo(e.length)}function Ho(e){return typeof e==`object`&&!!e}function Uo(e){return Ho(e)&&Vo(e)}function Wo(e,t=Ia){return Uo(e)?Pa(Array.from(e),Fa(zo(t),1)):[]}function Go(e,t,n){return t===!0?Wo(e,n):typeof t==`function`?Wo(e,t):e}var Ko=_((e=>{var t=x();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),qo=_(((e,t)=>{t.exports=Ko()})),Jo=_((e=>{var t=x(),n=qo();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Yo=_(((e,t)=>{t.exports=Jo()}))(),Xo=(0,A.createContext)(null),Zo=e=>e,z=()=>{var e=(0,A.useContext)(Xo);return e?e.store.dispatch:Zo},Qo=()=>{},$o=()=>Qo,es=(e,t)=>e===t;function B(e){var t=(0,A.useContext)(Xo),n=(0,A.useMemo)(()=>t?t=>{if(t!=null)return e(t)}:Qo,[t,e]);return(0,Yo.useSyncExternalStoreWithSelector)(t?t.subscription.addNestedSub:$o,t?t.store.getState:Qo,t?t.store.getState:Qo,n,es)}function ts(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!=`function`)throw TypeError(t)}function ns(e,t=`expected all items to be functions, instead received the following types: `){if(!e.every(e=>typeof e==`function`)){let n=e.map(e=>typeof e==`function`?`function ${e.name||`unnamed`}()`:typeof e).join(`, `);throw TypeError(`${t}[${n}]`)}}var rs=e=>Array.isArray(e)?e:[e];function is(e){let t=Array.isArray(e[0])?e[0]:e;return ns(t,`createSelector expects all input-selectors to be functions, but received the following types: `),t}function as(e,t){let n=[],{length:r}=e;for(let i=0;i`u`?os:WeakRef,cs=0,ls=1;function us(){return{s:cs,v:void 0,o:null,p:null}}function ds(e){return e instanceof ss?e.deref():e}function fs(e,t={}){let n=us(),{resultEqualityCheck:r}=t,i,a=0;function o(){let t=n,{length:o}=arguments;for(let e=0,n=o;e{n=us(),o.resetResultsCount()},o.resultsCount=()=>a,o.resetResultsCount=()=>{a=0},o}function ps(e,...t){let n=typeof e==`function`?{memoize:e,memoizeOptions:t}:e,r=(...e)=>{let t=0,r=0,i,a={},o=e.pop();typeof o==`object`&&(a=o,o=e.pop()),ts(o,`createSelector expects an output function after the inputs, but received: [${typeof o}]`);let{memoize:s,memoizeOptions:c=[],argsMemoize:l=fs,argsMemoizeOptions:u=[]}={...n,...a},d=rs(c),f=rs(u),p=is(e),m=s(function(){return t++,o.apply(null,arguments)},...d),h=l(function(){r++;let e=as(p,arguments);return i=m.apply(null,e),i},...f);return Object.assign(h,{resultFunc:o,memoizedResultFunc:m,dependencies:p,dependencyRecomputations:()=>r,resetDependencyRecomputations:()=>{r=0},lastResult:()=>i,recomputations:()=>t,resetRecomputations:()=>{t=0},memoize:s,argsMemoize:l})};return Object.assign(r,{withTypes:()=>r}),r}var V=ps(fs);function ms(e,t=1){let n=[],r=Math.floor(t),i=(e,t)=>{for(let a=0;a{if(e!==t){let r=gs(e),i=gs(t);if(r===i&&r===0){if(et)return n===`desc`?-1:1}return n===`desc`?i-r:r-i}return 0};function vs(e){return typeof e==`symbol`||e instanceof Symbol}var ys=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,bs=/^\w*$/;function xs(e,t){return Array.isArray(e)?!1:typeof e==`number`||typeof e==`boolean`||e==null||vs(e)?!0:typeof e==`string`&&(bs.test(e)||!ys.test(e))||t!=null&&Object.hasOwn(t,e)}function Ss(e,t,n,r){if(e==null)return[];n=r?void 0:n,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(n)||(n=n==null?[]:[n]),n=n.map(e=>String(e));let i=(e,t)=>{let n=e;for(let e=0;et==null||e==null?t:typeof e==`object`&&`key`in e?Object.hasOwn(t,e.key)?t[e.key]:i(t,e.path):typeof e==`function`?e(t):Array.isArray(e)?i(t,e):typeof t==`object`?t[e]:t,o=t.map(e=>(Array.isArray(e)&&e.length===1&&(e=e[0]),e==null||typeof e==`function`||Array.isArray(e)||xs(e)?e:{key:e,path:Xr(e)}));return e.map(e=>({original:e,criteria:o.map(t=>a(t,e))})).slice().sort((e,t)=>{for(let r=0;re.original)}function Cs(e,...t){let n=t.length;return n>1&&hs(e,t[0],t[1])?t=[]:n>2&&hs(t[0],t[1],t[2])&&(t=[t[0]]),Ss(e,ms(t),[`asc`])}var ws=e=>e.legend.settings,Ts=e=>e.legend.size;V([e=>e.legend.payload,ws],(e,t)=>{var n=t.itemSorter,r=e.flat(1);return n?Cs(r,n):r});function Es(e,t){return js(e)||As(e,t)||Os(e,t)||Ds()}function Ds(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Os(e,t){if(e){if(typeof e==`string`)return ks(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ks(e,t):void 0}}function ks(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nMs||Math.abs(e.left-t.left)>Ms||Math.abs(e.top-t.top)>Ms||Math.abs(e.width-t.width)>Ms}function Ps(e){var t=e.getBoundingClientRect();return{height:t.height,left:t.left,top:t.top,width:t.width}}function Fs(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=Es((0,A.useState)({height:0,left:0,top:0,width:0}),2),n=t[0],r=t[1],i=(0,A.useRef)(null),a=(0,A.useRef)(n);a.current=n;var o=(0,A.useCallback)(e=>{if(i.current!=null&&(i.current.disconnect(),i.current=null),e!=null){var t=Ps(e);if(Ns(t,a.current)&&r(t),typeof ResizeObserver<`u`){var n=new ResizeObserver(()=>{var t=Ps(e);Ns(t,a.current)&&r(t)});n.observe(e),i.current=n}}},[...e]);return(0,A.useEffect)(()=>()=>{var e;(e=i.current)==null||e.disconnect()},[]),[n,o]}function Is(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Ls=typeof Symbol==`function`&&Symbol.observable||`@@observable`,Rs=()=>Math.random().toString(36).substring(7).split(``).join(`.`),zs={INIT:`@@redux/INIT${Rs()}`,REPLACE:`@@redux/REPLACE${Rs()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${Rs()}`};function Bs(e){if(typeof e!=`object`||!e)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function Vs(e,t,n){if(typeof e!=`function`)throw Error(Is(2));if(typeof t==`function`&&typeof n==`function`||typeof n==`function`&&typeof arguments[3]==`function`)throw Error(Is(0));if(typeof t==`function`&&n===void 0&&(n=t,t=void 0),n!==void 0){if(typeof n!=`function`)throw Error(Is(1));return n(Vs)(e,t)}let r=e,i=t,a=new Map,o=a,s=0,c=!1;function l(){o===a&&(o=new Map,a.forEach((e,t)=>{o.set(t,e)}))}function u(){if(c)throw Error(Is(3));return i}function d(e){if(typeof e!=`function`)throw Error(Is(4));if(c)throw Error(Is(5));let t=!0;l();let n=s++;return o.set(n,e),function(){if(t){if(c)throw Error(Is(6));t=!1,l(),o.delete(n),a=null}}}function f(e){if(!Bs(e))throw Error(Is(7));if(e.type===void 0)throw Error(Is(8));if(typeof e.type!=`string`)throw Error(Is(17));if(c)throw Error(Is(9));try{c=!0,i=r(i,e)}finally{c=!1}return(a=o).forEach(e=>{e()}),e}function p(e){if(typeof e!=`function`)throw Error(Is(10));r=e,f({type:zs.REPLACE})}function m(){let e=d;return{subscribe(t){if(typeof t!=`object`||!t)throw Error(Is(11));function n(){let e=t;e.next&&e.next(u())}return n(),{unsubscribe:e(n)}},[Ls](){return this}}}return f({type:zs.INIT}),{dispatch:f,subscribe:d,getState:u,replaceReducer:p,[Ls]:m}}function Hs(e){Object.keys(e).forEach(t=>{let n=e[t];if(n(void 0,{type:zs.INIT})===void 0)throw Error(Is(12));if(n(void 0,{type:zs.PROBE_UNKNOWN_ACTION()})===void 0)throw Error(Is(13))})}function Us(e){let t=Object.keys(e),n={};for(let r=0;re:e.length===1?e[0]:e.reduce((e,t)=>(...n)=>e(t(...n)))}function Gs(...e){return t=>(n,r)=>{let i=t(n,r),a=()=>{throw Error(Is(15))},o={getState:i.getState,dispatch:(e,...t)=>a(e,...t)};return a=Ws(...e.map(e=>e(o)))(i.dispatch),{...i,dispatch:a}}}function Ks(e){return Bs(e)&&`type`in e&&typeof e.type==`string`}var qs=Symbol.for(`immer-nothing`),Js=Symbol.for(`immer-draftable`),Ys=Symbol.for(`immer-state`);function Xs(e,...t){throw Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Zs=Object,Qs=Zs.getPrototypeOf,$s=`constructor`,ec=`prototype`,tc=`configurable`,nc=`enumerable`,rc=`writable`,ic=`value`,ac=e=>!!e&&!!e[Ys];function oc(e){return e?lc(e)||gc(e)||!!e[Js]||!!e[$s]?.[Js]||_c(e)||vc(e):!1}var sc=Zs[ec][$s].toString(),cc=new WeakMap;function lc(e){if(!e||!yc(e))return!1;let t=Qs(e);if(t===null||t===Zs[ec])return!0;let n=Zs.hasOwnProperty.call(t,$s)&&t[$s];if(n===Object)return!0;if(!bc(n))return!1;let r=cc.get(n);return r===void 0&&(r=Function.toString.call(n),cc.set(n,r)),r===sc}function uc(e,t,n=!0){dc(e)===0?(n?Reflect.ownKeys(e):Zs.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function dc(e){let t=e[Ys];return t?t.type_:gc(e)?1:_c(e)?2:vc(e)?3:0}var fc=(e,t,n=dc(e))=>n===2?e.has(t):Zs[ec].hasOwnProperty.call(e,t),pc=(e,t,n=dc(e))=>n===2?e.get(t):e[t],mc=(e,t,n,r=dc(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function hc(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var gc=Array.isArray,_c=e=>e instanceof Map,vc=e=>e instanceof Set,yc=e=>typeof e==`object`,bc=e=>typeof e==`function`,xc=e=>typeof e==`boolean`;function Sc(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Cc=e=>e.copy_||e.base_,wc=e=>e.modified_?e.copy_:e.base_;function Tc(e,t){if(_c(e))return new Map(e);if(vc(e))return new Set(e);if(gc(e))return Array[ec].slice.call(e);let n=lc(e);if(t===!0||t===`class_only`&&!n){let t=Zs.getOwnPropertyDescriptors(e);delete t[Ys];let n=Reflect.ownKeys(t);for(let r=0;r1&&Zs.defineProperties(e,{set:Oc,add:Oc,clear:Oc,delete:Oc}),Zs.freeze(e),t&&uc(e,(e,t)=>{Ec(t,!0)},!1),e)}function Dc(){Xs(2)}var Oc={[ic]:Dc};function kc(e){return e===null||!yc(e)||Zs.isFrozen(e)}var Ac=`MapSet`,jc=`Patches`,Mc=`ArrayMethods`,Nc={};function Pc(e){let t=Nc[e];return t||Xs(0,e),t}var Fc=e=>!!Nc[e],Ic,Lc=()=>Ic,Rc=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Fc(Ac)?Pc(Ac):void 0,arrayMethodsPlugin_:Fc(Mc)?Pc(Mc):void 0});function zc(e,t){t&&(e.patchPlugin_=Pc(jc),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Bc(e){Vc(e),e.drafts_.forEach(Uc),e.drafts_=null}function Vc(e){e===Ic&&(Ic=e.parent_)}var Hc=e=>Ic=Rc(Ic,e);function Uc(e){let t=e[Ys];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Wc(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[Ys].modified_&&(Bc(t),Xs(4)),oc(e)&&(e=Gc(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[Ys].base_,e,t)}else e=Gc(t,n);return Kc(t,e,!0),Bc(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===qs?void 0:e}function Gc(e,t){if(kc(t))return t;let n=t[Ys];if(!n)return el(t,e.handledSet_,e);if(!Jc(n,e))return t;if(!n.modified_)return n.base_;if(!n.finalized_){let{callbacks_:t}=n;if(t)for(;t.length>0;)t.pop()(e);Qc(n,e)}return n.copy_}function Kc(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Ec(t,n)}function qc(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Jc=(e,t)=>e.scope_===t,Yc=[];function Xc(e,t,n,r){let i=Cc(e),a=e.type_;if(r!==void 0&&pc(i,r,a)===t){mc(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;uc(i,(e,n)=>{if(ac(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Yc;for(let e of o)mc(i,e,n,a)}function Zc(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Jc(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=wc(i);Xc(e,i.draft_??i,a,n),Qc(i,r)})}function Qc(e,t){if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(e.assigned_?.size??0)>0)){let{patchPlugin_:n}=t;if(n){let r=n.getPath(e);r&&n.generatePatches_(e,r,t)}qc(e)}}function $c(e,t,n){let{scope_:r}=e;if(ac(n)){let i=n[Ys];Jc(i,r)&&i.callbacks_.push(function(){ll(e),Xc(e,n,wc(i),t)})}else oc(n)&&e.callbacks_.push(function(){let i=Cc(e);e.type_===3?i.has(n)&&el(n,r.handledSet_,r):pc(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&el(pc(e.copy_,t,e.type_),r.handledSet_,r)})}function el(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||ac(e)||t.has(e)||!oc(e)||kc(e)?e:(t.add(e),uc(e,(r,i)=>{if(ac(i)){let t=i[Ys];Jc(t,n)&&(mc(e,r,wc(t),e.type_),qc(t))}else oc(i)&&el(i,t,n)}),e)}function tl(e,t){let n=gc(e),r={type_:+!!n,scope_:t?t.scope_:Lc(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0},i=r,a=nl;n&&(i=[r],a=rl);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var nl={get(e,t){if(t===Ys)return e;let n=e.scope_.arrayMethodsPlugin_,r=e.type_===1&&typeof t==`string`;if(r&&n?.isArrayOperationMethod(t))return n.createMethodInterceptor(e,t);let i=Cc(e);if(!fc(i,t,e.type_))return ol(e,i,t);let a=i[t];if(e.finalized_||!oc(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Sc(t))return a;if(a===il(e.base_,t)||al(e,t,a)){ll(e);let n=e.type_===1?+t:t,r=dl(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Cc(e)},ownKeys(e){return Reflect.ownKeys(Cc(e))},set(e,t,n){let r=sl(Cc(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=il(Cc(e),t),i=r?.[Ys];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(hc(n,r)&&(n!==void 0||fc(e.base_,t,e.type_)))return!0;ll(e),cl(e)}return e.copy_[t]===n&&(n!==void 0||fc(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),$c(e,t,n),!0)},deleteProperty(e,t){return ll(e),il(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),cl(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Cc(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[rc]:!0,[tc]:e.type_!==1||t!==`length`,[nc]:r[nc],[ic]:n[t]}},defineProperty(){Xs(11)},getPrototypeOf(e){return Qs(e.base_)},setPrototypeOf(){Xs(12)}},rl={};for(let e in nl){let t=nl[e];rl[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}rl.deleteProperty=function(e,t){return rl.set.call(this,e,t,void 0)},rl.set=function(e,t,n){return nl.set.call(this,e[0],t,n,e[0])};function il(e,t){let n=e[Ys];return(n?Cc(n):e)[t]}function al(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!oc(n)||n[Ys]?!1:e.baseRefs_.has(n)}function ol(e,t,n){let r=sl(t,n);return r?ic in r?r[ic]:r.get?.call(e.draft_):void 0}function sl(e,t){if(!(t in e))return;let n=Qs(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=Qs(n)}}function cl(e){e.modified_||(e.modified_=!0,e.parent_&&cl(e.parent_))}function ll(e){e.copy_||=(e.assigned_=new Map,Tc(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var ul=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(bc(e)&&!bc(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}bc(t)||Xs(6),n!==void 0&&!bc(n)&&Xs(7);let r;if(oc(e)){let i=Hc(this),a=dl(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Bc(i):Vc(i)}return zc(i,n),Wc(r,i)}else if(!e||!yc(e)){if(r=t(e),r===void 0&&(r=e),r===qs&&(r=void 0),this.autoFreeze_&&Ec(r,!0),n){let t=[],i=[];Pc(jc).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}else Xs(1,e)},this.produceWithPatches=(e,t)=>{if(bc(e))return(t,...n)=>this.produceWithPatches(t,t=>e(t,...n));let n,r;return[this.produce(e,t,(e,t)=>{n=e,r=t}),n,r]},xc(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),xc(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),xc(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){oc(e)||Xs(8),ac(e)&&(e=fl(e));let t=Hc(this),n=dl(t,e,void 0);return n[Ys].isManual_=!0,Vc(t),n}finishDraft(e,t){let n=e&&e[Ys];(!n||!n.isManual_)&&Xs(9);let{scope_:r}=n;return zc(r,t),Wc(void 0,r)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let n;for(n=t.length-1;n>=0;n--){let r=t[n];if(r.path.length===0&&r.op===`replace`){e=r.value;break}}n>-1&&(t=t.slice(n+1));let r=Pc(jc).applyPatches_;return ac(e)?r(e,t):this.produce(e,e=>r(e,t))}};function dl(e,t,n,r){let[i,a]=_c(t)?Pc(Ac).proxyMap_(t,n):vc(t)?Pc(Ac).proxySet_(t,n):tl(t,n);return(n?.scope_??Lc()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?Zc(n,a,r):a.callbacks_.push(function(e){e.mapSetPlugin_?.fixSetContents(a);let{patchPlugin_:t}=e;a.modified_&&t&&t.generatePatches_(a,[],e)}),i}function fl(e){return ac(e)||Xs(10,e),pl(e)}function pl(e){if(!oc(e)||kc(e))return e;let t=e[Ys],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Tc(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Tc(e,!0);return uc(n,(e,t)=>{mc(n,e,pl(t))},r),t&&(t.finalized_=!1),n}var ml=new ul().produce,H=e=>e;function hl(e){return({dispatch:t,getState:n})=>r=>i=>typeof i==`function`?i(t,n,e):r(i)}var gl=hl(),_l=hl,vl=typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]==`object`?Ws:Ws.apply(null,arguments)};typeof window<`u`&&window.__REDUX_DEVTOOLS_EXTENSION__&&window.__REDUX_DEVTOOLS_EXTENSION__;function yl(e,t){function n(...n){if(t){let r=t(...n);if(!r)throw Error(Du(0));return{type:e,payload:r.payload,...`meta`in r&&{meta:r.meta},...`error`in r&&{error:r.error}}}return{type:e,payload:n[0]}}return n.toString=()=>`${e}`,n.type=e,n.match=t=>Ks(t)&&t.type===e,n}var bl=class e extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,e.prototype)}static get[Symbol.species](){return e}concat(...e){return super.concat.apply(this,e)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new e(...t[0].concat(this)):new e(...t.concat(this))}};function xl(e){return oc(e)?ml(e,()=>{}):e}function Sl(e,t,n){return e.has(t)?e.get(t):e.set(t,n(t)).get(t)}function Cl(e){return typeof e==`boolean`}var wl=()=>function(e){let{thunk:t=!0,immutableCheck:n=!0,serializableCheck:r=!0,actionCreatorCheck:i=!0}=e??{},a=new bl;return t&&(Cl(t)?a.push(gl):a.push(_l(t.extraArgument))),a},Tl=`RTK_autoBatch`,U=()=>e=>({payload:e,meta:{[Tl]:!0}}),El=e=>t=>{setTimeout(t,e)},Dl=(e,t)=>n=>{let r=!1,i=()=>{r||(r=!0,cancelAnimationFrame(a),clearTimeout(o),n())},a=e(i),o=setTimeout(i,t)},Ol=(e={type:`raf`})=>t=>(...n)=>{let r=t(...n),i=!0,a=!1,o=!1,s=new Set,c=e.type===`tick`?queueMicrotask:e.type===`raf`?typeof window<`u`&&window.requestAnimationFrame?Dl(window.requestAnimationFrame,100):El(10):e.type===`callback`?e.queueNotification:El(e.timeout),l=()=>{o=!1,a&&(a=!1,s.forEach(e=>e()))};return Object.assign({},r,{subscribe(e){let t=r.subscribe(()=>i&&e());return s.add(e),()=>{t(),s.delete(e)}},dispatch(e){try{return i=!e?.meta?.[Tl],a=!i,a&&(o||(o=!0,c(l))),r.dispatch(e)}finally{i=!0}}})},kl=e=>function(t){let{autoBatch:n=!0}=t??{},r=new bl(e);return n&&r.push(Ol(typeof n==`object`?n:void 0)),r};function Al(e){let t=wl(),{reducer:n=void 0,middleware:r,devTools:i=!0,duplicateMiddlewareCheck:a=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{},c;if(typeof n==`function`)c=n;else if(Bs(n))c=Us(n);else throw Error(Du(1));let l;l=typeof r==`function`?r(t):t();let u=Ws;i&&(u=vl({trace:!1,...typeof i==`object`&&i}));let d=kl(Gs(...l)),f=typeof s==`function`?s(d):d(),p=u(...f);return Vs(c,o,p)}function jl(e){let t={},n=[],r,i={addCase(e,n){let r=typeof e==`string`?e:e.type;if(!r)throw Error(Du(28));if(r in t)throw Error(Du(29));return t[r]=n,i},addAsyncThunk(e,r){return r.pending&&(t[e.pending.type]=r.pending),r.rejected&&(t[e.rejected.type]=r.rejected),r.fulfilled&&(t[e.fulfilled.type]=r.fulfilled),r.settled&&n.push({matcher:e.settled,reducer:r.settled}),i},addMatcher(e,t){return n.push({matcher:e,reducer:t}),i},addDefaultCase(e){return r=e,i}};return e(i),[t,n,r]}function Ml(e){return typeof e==`function`}function Nl(e,t){let[n,r,i]=jl(t),a;if(Ml(e))a=()=>xl(e());else{let t=xl(e);a=()=>t}function o(e=a(),t){let o=[n[t.type],...r.filter(({matcher:e})=>e(t)).map(({reducer:e})=>e)];return o.filter(e=>!!e).length===0&&(o=[i]),o.reduce((e,n)=>{if(n)if(ac(e)){let r=n(e,t);return r===void 0?e:r}else if(oc(e))return ml(e,e=>n(e,t));else{let r=n(e,t);if(r===void 0){if(e===null)return e;throw Error(`A case reducer on a non-draftable value must not return undefined`)}return r}return e},e)}return o.getInitialState=a,o}var Pl=`ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW`,Fl=(e=21)=>{let t=``,n=e;for(;n--;)t+=Pl[Math.random()*64|0];return t},Il=Symbol.for(`rtk-slice-createasyncthunk`);function Ll(e,t){return`${e}/${t}`}function Rl({creators:e}={}){let t=e?.asyncThunk?.[Il];return function(e){let{name:n,reducerPath:r=n}=e;if(!n)throw Error(Du(11));let i=(typeof e.reducers==`function`?e.reducers(Vl()):e.reducers)||{},a=Object.keys(i),o={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},s={addCase(e,t){let n=typeof e==`string`?e:e.type;if(!n)throw Error(Du(12));if(n in o.sliceCaseReducersByType)throw Error(Du(13));return o.sliceCaseReducersByType[n]=t,s},addMatcher(e,t){return o.sliceMatchers.push({matcher:e,reducer:t}),s},exposeAction(e,t){return o.actionCreators[e]=t,s},exposeCaseReducer(e,t){return o.sliceCaseReducersByName[e]=t,s}};a.forEach(r=>{let a=i[r],o={reducerName:r,type:Ll(n,r),createNotation:typeof e.reducers==`function`};Ul(a)?Gl(o,a,s,t):Hl(o,a,s)});function c(){let[t={},n=[],r=void 0]=typeof e.extraReducers==`function`?jl(e.extraReducers):[e.extraReducers],i={...t,...o.sliceCaseReducersByType};return Nl(e.initialState,e=>{for(let t in i)e.addCase(t,i[t]);for(let t of o.sliceMatchers)e.addMatcher(t.matcher,t.reducer);for(let t of n)e.addMatcher(t.matcher,t.reducer);r&&e.addDefaultCase(r)})}let l=e=>e,u=new Map,d=new WeakMap,f;function p(e,t){return f||=c(),f(e,t)}function m(){return f||=c(),f.getInitialState()}function h(t,n=!1){function r(e){let i=e[t];return i===void 0&&n&&(i=Sl(d,r,m)),i}function i(t=l){return Sl(Sl(u,n,()=>new WeakMap),t,()=>{let r={};for(let[i,a]of Object.entries(e.selectors??{}))r[i]=zl(a,t,()=>Sl(d,t,m),n);return r})}return{reducerPath:t,getSelectors:i,get selectors(){return i(r)},selectSlice:r}}let g={name:n,reducer:p,actions:o.actionCreators,caseReducers:o.sliceCaseReducersByName,getInitialState:m,...h(r),injectInto(e,{reducerPath:t,...n}={}){let i=t??r;return e.inject({reducerPath:i,reducer:p},n),{...g,...h(i,!0)}}};return g}}function zl(e,t,n,r){function i(i,...a){let o=t(i);return o===void 0&&r&&(o=n()),e(o,...a)}return i.unwrapped=e,i}var Bl=Rl();function Vl(){function e(e,t){return{_reducerDefinitionType:`asyncThunk`,payloadCreator:e,...t}}return e.withTypes=()=>e,{reducer(e){return Object.assign({[e.name](...t){return e(...t)}}[e.name],{_reducerDefinitionType:`reducer`})},preparedReducer(e,t){return{_reducerDefinitionType:`reducerWithPrepare`,prepare:e,reducer:t}},asyncThunk:e}}function Hl({type:e,reducerName:t,createNotation:n},r,i){let a,o;if(`reducer`in r){if(n&&!Wl(r))throw Error(Du(17));a=r.reducer,o=r.prepare}else a=r;i.addCase(e,a).exposeCaseReducer(t,a).exposeAction(t,o?yl(e,o):yl(e))}function Ul(e){return e._reducerDefinitionType===`asyncThunk`}function Wl(e){return e._reducerDefinitionType===`reducerWithPrepare`}function Gl({type:e,reducerName:t},n,r,i){if(!i)throw Error(Du(18));let{payloadCreator:a,fulfilled:o,pending:s,rejected:c,settled:l,options:u}=n,d=i(e,a,u);r.exposeAction(t,d),o&&r.addCase(d.fulfilled,o),s&&r.addCase(d.pending,s),c&&r.addCase(d.rejected,c),l&&r.addMatcher(d.settled,l),r.exposeCaseReducer(t,{fulfilled:o||Kl,pending:s||Kl,rejected:c||Kl,settled:l||Kl})}function Kl(){}var ql=`task`,Jl=`listener`,Yl=`completed`,Xl=`cancelled`,Zl=`task-${Xl}`,Ql=`task-${Yl}`,$l=`${Jl}-${Xl}`,eu=`${Jl}-${Yl}`,tu=class{constructor(e){this.code=e,this.message=`${ql} ${Xl} (reason: ${e})`}code;name=`TaskAbortError`;message},nu=(e,t)=>{if(typeof e!=`function`)throw TypeError(Du(32))},ru=()=>{},iu=(e,t=ru)=>(e.catch(t),e),au=(e,t)=>(e.addEventListener(`abort`,t,{once:!0}),()=>e.removeEventListener(`abort`,t)),ou=e=>{if(e.aborted)throw new tu(e.reason)};function su(e,t){let n=ru;return new Promise((r,i)=>{let a=()=>i(new tu(e.reason));if(e.aborted){a();return}n=au(e,a),t.finally(()=>n()).then(r,i)}).finally(()=>{n=ru})}var cu=async(e,t)=>{try{return await Promise.resolve(),{status:`ok`,value:await e()}}catch(e){return{status:e instanceof tu?`cancelled`:`rejected`,error:e}}finally{t?.()}},lu=e=>t=>iu(su(e,t).then(t=>(ou(e),t))),uu=e=>{let t=lu(e);return e=>t(new Promise(t=>setTimeout(t,e)))},{assign:du}=Object,fu={},pu=`listenerMiddleware`,mu=(e,t)=>{let n=t=>au(e,()=>t.abort(e.reason));return(r,i)=>{nu(r,`taskExecutor`);let a=new AbortController;n(a);let o=cu(async()=>{ou(e),ou(a.signal);let t=await r({pause:lu(a.signal),delay:uu(a.signal),signal:a.signal});return ou(a.signal),t},()=>a.abort(Ql));return i?.autoJoin&&t.push(o.catch(ru)),{result:lu(e)(o),cancel(){a.abort(Zl)}}}},hu=(e,t)=>{let n=async(n,r)=>{ou(t);let i=()=>{},a=[new Promise((t,r)=>{let a=e({predicate:n,effect:(e,n)=>{n.unsubscribe(),t([e,n.getState(),n.getOriginalState()])}});i=()=>{a(),r()}})];r!=null&&a.push(new Promise(e=>setTimeout(e,r,null)));try{let e=await su(t,Promise.race(a));return ou(t),e}finally{i()}};return((e,t)=>iu(n(e,t)))},gu=e=>{let{type:t,actionCreator:n,matcher:r,predicate:i,effect:a}=e;if(t)i=yl(t).match;else if(n)t=n.type,i=n.match;else if(r)i=r;else if(!i)throw Error(Du(21));return nu(a,`options.listener`),{predicate:i,type:t,effect:a}},_u=du(e=>{let{type:t,predicate:n,effect:r}=gu(e);return{id:Fl(),effect:r,type:t,predicate:n,pending:new Set,unsubscribe:()=>{throw Error(Du(22))}}},{withTypes:()=>_u}),vu=(e,t)=>{let{type:n,effect:r,predicate:i}=gu(t);return Array.from(e.values()).find(e=>(typeof n==`string`?e.type===n:e.predicate===i)&&e.effect===r)},yu=e=>{e.pending.forEach(e=>{e.abort($l)})},bu=(e,t)=>()=>{for(let e of t.keys())yu(e);e.clear()},xu=(e,t,n)=>{try{e(t,n)}catch(e){setTimeout(()=>{throw e},0)}},Su=du(yl(`${pu}/add`),{withTypes:()=>Su}),Cu=yl(`${pu}/removeAll`),wu=du(yl(`${pu}/remove`),{withTypes:()=>wu}),Tu=(...e)=>{console.error(`${pu}/error`,...e)},Eu=(e={})=>{let t=new Map,n=new Map,r=e=>{let t=n.get(e)??0;n.set(e,t+1)},i=e=>{let t=n.get(e)??1;t===1?n.delete(e):n.set(e,t-1)},{extra:a,onError:o=Tu}=e;nu(o,`onError`);let s=e=>(e.unsubscribe=()=>t.delete(e.id),t.set(e.id,e),t=>{e.unsubscribe(),t?.cancelActive&&yu(e)}),c=(e=>{let n=vu(t,e)??_u(e);return s(n)});du(c,{withTypes:()=>c});let l=e=>{let n=vu(t,e);return n&&(n.unsubscribe(),e.cancelActive&&yu(n)),!!n};du(l,{withTypes:()=>l});let u=async(e,n,s,l)=>{let u=new AbortController,d=hu(c,u.signal),f=[];try{e.pending.add(u),r(e),await Promise.resolve(e.effect(n,du({},s,{getOriginalState:l,condition:(e,t)=>d(e,t).then(Boolean),take:d,delay:uu(u.signal),pause:lu(u.signal),extra:a,signal:u.signal,fork:mu(u.signal,f),unsubscribe:e.unsubscribe,subscribe:()=>{t.set(e.id,e)},cancelActiveListeners:()=>{e.pending.forEach((e,t,n)=>{e!==u&&(e.abort($l),n.delete(e))})},cancel:()=>{u.abort($l),e.pending.delete(u)},throwIfCancelled:()=>{ou(u.signal)}})))}catch(e){e instanceof tu||xu(o,e,{raisedBy:`effect`})}finally{await Promise.all(f),u.abort(eu),i(e),e.pending.delete(u)}},d=bu(t,n);return{middleware:e=>n=>r=>{if(!Ks(r))return n(r);if(Su.match(r))return c(r.payload);if(Cu.match(r)){d();return}if(wu.match(r))return l(r.payload);let i=e.getState(),a=()=>{if(i===fu)throw Error(Du(23));return i},s;try{if(s=n(r),t.size>0){let n=e.getState(),s=Array.from(t.values());for(let t of s){let s=!1;try{s=t.predicate(r,n,i)}catch(e){s=!1,xu(o,e,{raisedBy:`predicate`})}s&&u(t,r,e,a)}}}finally{i=fu}return s},startListening:c,stopListening:l,clearListeners:d}};function Du(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Ou=Bl({name:`chartLayout`,initialState:{layoutType:`horizontal`,width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){e.margin.top=t.payload.top??0,e.margin.right=t.payload.right??0,e.margin.bottom=t.payload.bottom??0,e.margin.left=t.payload.left??0},setScale(e,t){e.scale=t.payload}}}),ku=Ou.actions,Au=ku.setMargin,ju=ku.setLayout,Mu=ku.setChartSize,Nu=ku.setScale,Pu=Ou.reducer;function Fu(e,t,n){return Array.isArray(e)&&e&&t+n!==0?e.slice(t,n+1):e}function W(e){return Number.isFinite(e)}function Iu(e){return typeof e==`number`&&e>0&&Number.isFinite(e)}function Lu(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ru(e){for(var t=1;t{if(t&&n){var r=n.width,i=n.height,a=t.align,o=t.verticalAlign,s=t.layout,c=t.position,l=t.offset,u=l===void 0?0:l;if(c!=null){if(Si(c)){if(c===`top`&&I(e.top))return Ru(Ru({},e),{},{top:e.top+(i||0)+u});if(c===`bottom`&&I(e.bottom))return Ru(Ru({},e),{},{bottom:e.bottom+(i||0)+u});if(c===`left`&&I(e.left))return Ru(Ru({},e),{},{left:e.left+(r||0)+u});if(c===`right`&&I(e.right))return Ru(Ru({},e),{},{right:e.right+(r||0)+u})}return e}if((s===`vertical`||s===`horizontal`&&o===`middle`)&&a!==`center`&&I(e[a]))return Ru(Ru({},e),{},{[a]:e[a]+(r||0)});if((s===`horizontal`||s===`vertical`&&a===`center`)&&o!==`middle`&&I(e[o]))return Ru(Ru({},e),{},{[o]:e[o]+(i||0)})}return e},Uu=(e,t)=>e===`horizontal`&&t===`xAxis`||e===`vertical`&&t===`yAxis`||e===`centric`&&t===`angleAxis`||e===`radial`&&t===`radiusAxis`,Wu=(e,t,n,r)=>{if(r)return e.map(e=>e.coordinate);var i,a,o=e.map(e=>(e.coordinate===t&&(i=!0),e.coordinate===n&&(a=!0),e.coordinate));return i||o.push(t),a||o.push(n),o},Gu=(e,t,n)=>{if(!e)return null;var r=e.duplicateDomain,i=e.type,a=e.range,o=e.scale,s=e.realScaleType,c=e.isCategorical,l=e.categoricalDomain,u=e.tickCount,d=e.ticks,f=e.niceTicks,p=e.axisType;if(!o)return null;var m=s===`scaleBand`&&o.bandwidth?o.bandwidth()/2:2,h=(t||n)&&i===`category`&&o.bandwidth?o.bandwidth()/m:0;return h=p===`angleAxis`&&a&&a.length>=2?ni(a[0]-a[1])*2*h:h,t&&(d||f)?(d||f||[]).map((e,t)=>{var n=r?r.indexOf(e):e,i=o.map(n);return W(i)?{coordinate:i+h,value:e,offset:h,index:t}:null}).filter(fi):c&&l?l.map((e,t)=>{var n=o.map(e);return W(n)?{coordinate:n+h,value:e,index:t,offset:h}:null}).filter(fi):o.ticks&&!n&&u!=null?o.ticks(u).map((e,t)=>{var n=o.map(e);return W(n)?{coordinate:n+h,value:e,index:t,offset:h}:null}).filter(fi):o.domain().map((e,t)=>{var n=o.map(e);return W(n)?{coordinate:n+h,value:r?r[e]:e,index:t,offset:h}:null}).filter(fi)},Ku=(e,t)=>{if(!t||t.length!==2||!I(t[0])||!I(t[1]))return e;var n=Math.min(t[0],t[1]),r=Math.max(t[0],t[1]),i=[e[0],e[1]];return(!I(e[0])||e[0]r)&&(i[1]=r),i[0]>r&&(i[0]=r),i[1]{var t=e.length;if(!(t<=0)){var n=e[0]?.length;if(!(n==null||n<=0))for(var r=0;r=0?(s[0]=i,i+=u,s[1]=i):(s[0]=a,a+=u,s[1]=a)}}}},expand:xa,none:ga,silhouette:Sa,wiggle:Ca,positive:e=>{var t=e.length;if(!(t<=0)){var n=e[0]?.length;if(!(n==null||n<=0))for(var r=0;r=0?(o[0]=i,i+=s,o[1]=i):(o[0]=0,o[1]=0)}}}}},Ju=(e,t,n)=>{var r=qu[n]??ga,i=ba().keys(t).value((e,t)=>Number(G(e,t,0))).order(_a).offset(r)(e);return i.forEach((n,r)=>{n.forEach((n,i)=>{var a=G(e[i],t[r],0);Array.isArray(a)&&a.length===2&&I(a[0])&&I(a[1])&&(n[0]=a[0],n[1]=a[1])})}),i};function Yu(e){return e==null?void 0:String(e)}function Xu(e){var t=e.axis,n=e.ticks,r=e.bandSize,i=e.entry,a=e.index,o=e.dataKey;if(t.type===`category`){if(!t.allowDuplicatedCategory&&t.dataKey&&!R(i[t.dataKey])){var s=ui(n,`value`,i[t.dataKey]);if(s)return s.coordinate+r/2}return n!=null&&n[a]?n[a].coordinate+r/2:null}var c=G(i,R(o)?t.dataKey:o),l=t.scale.map(c);return I(l)?l:null}var Zu=e=>{var t=e.axis,n=e.ticks,r=e.offset,i=e.bandSize,a=e.entry,o=e.index;if(t.type===`category`)return n[o]?n[o].coordinate+r:null;var s=G(a,t.dataKey,t.scale.domain()[o]);if(R(s))return null;var c=t.scale.map(s);return I(c)?c-i/2+r:null},Qu=e=>{var t=e.numericAxis,n=t.scale.domain();if(t.type===`number`){var r=Math.min(n[0],n[1]),i=Math.max(n[0],n[1]);return r<=0&&i>=0?0:i<0?i:r}return n[0]},$u=e=>{var t=e.flat(2).filter(I);return[Math.min(...t),Math.max(...t)]},ed=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],td=(e,t,n)=>{if(!(e==null||Object.keys(e).length===0))return ed(Object.keys(e).reduce((r,i)=>{var a=e[i];if(!a)return r;var o=a.stackedData.reduce((e,r)=>{var i=$u(Fu(r,t,n));return!W(i[0])||!W(i[1])?e:[Math.min(e[0],i[0]),Math.max(e[1],i[1])]},[1/0,-1/0]);return[Math.min(o[0],r[0]),Math.max(o[1],r[1])]},[1/0,-1/0]))},nd=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,rd=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,id=(e,t,n)=>{if(e&&e.scale&&e.scale.bandwidth){var r=e.scale.bandwidth();if(!n||r>0)return r}if(e&&t&&t.length>=2){for(var i=Cs(t,e=>e.coordinate),a=[],o=0,s=1,c=i.length;su&&(d=Math.min(f,d));return d===1/0?0:d}return n?void 0:0};function ad(e){var t=e.tooltipEntrySettings,n=e.dataKey,r=e.payload,i=e.value,a=e.name;return Ru(Ru({},t),{},{dataKey:n,payload:r,value:i,name:a})}function od(e,t){if(e!=null)return String(e);if(typeof t==`string`)return t}var sd=(e,t)=>{if(t===`horizontal`)return e.relativeX;if(t===`vertical`)return e.relativeY},cd=(e,t)=>t===`centric`?e.angle:e.radius,ld=e=>e.layout.width,ud=e=>e.layout.height,dd=e=>e.layout.scale,fd=e=>e.layout.margin,pd=V(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),md=V(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),hd=`data-recharts-item-index`,gd=`data-recharts-item-id`;function _d(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function vd(e){for(var t=1;te.brush.height;function Cd(e){return md(e).reduce((e,t)=>t.orientation===`left`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function wd(e){return md(e).reduce((e,t)=>t.orientation===`right`&&!t.mirror&&!t.hide?e+(typeof t.width==`number`?t.width:60):e,0)}function Td(e){return pd(e).reduce((e,t)=>t.orientation===`top`&&!t.mirror&&!t.hide?e+(typeof t.height==`number`?t.height:30):e,0)}function Ed(e){return pd(e).reduce((e,t)=>t.orientation===`bottom`&&!t.mirror&&!t.hide?e+(typeof t.height==`number`?t.height:30):e,0)}var Dd=V([ld,ud,fd,Sd,Cd,wd,Td,Ed,ws,Ts],(e,t,n,r,i,a,o,s,c,l)=>{var u={left:(n.left||0)+i,right:(n.right||0)+a},d=vd(vd({},{top:(n.top||0)+o,bottom:(n.bottom||0)+s}),u),f=d.bottom;d.bottom+=r,d=Hu(d,c,l);var p=e-d.left-d.right,m=t-d.top-d.bottom;return vd(vd({brushBottom:f},d),{},{width:Math.max(p,0),height:Math.max(m,0)})}),Od=V(Dd,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),kd=V(ld,ud,(e,t)=>({x:0,y:0,width:e,height:t})),Ad=(0,A.createContext)(null),jd=()=>(0,A.useContext)(Ad)!=null,Md=e=>e.brush,Nd=V([Md,Dd,fd],(e,t,n)=>({height:e.height,x:I(e.x)?e.x:t.left,y:I(e.y)?e.y:t.top+t.height+t.brushBottom-(n?.bottom||0),width:I(e.width)?e.width:t.width}));function Pd(e,t,{signal:n,edges:r}={}){let i,a=null,o=r!=null&&r.includes(`leading`),s=r==null||r.includes(`trailing`),c=()=>{a!==null&&(e.apply(i,a),i=void 0,a=null)},l=()=>{s&&c(),p()},u=null,d=()=>{u!=null&&clearTimeout(u),u=setTimeout(()=>{u=null,l()},t)},f=()=>{u!==null&&(clearTimeout(u),u=null)},p=()=>{f(),i=void 0,a=null},m=()=>{c()},h=function(...e){if(n?.aborted)return;i=this,a=e;let t=u==null;d(),o&&t&&c()};return h.schedule=d,h.cancel=p,h.flush=m,n?.addEventListener(`abort`,p,{once:!0}),h}function Fd(e,t=0,n={}){typeof n!=`object`&&(n={});let{leading:r=!1,trailing:i=!0,maxWait:a}=n,o=[,,];r&&(o[0]=`leading`),i&&(o[1]=`trailing`);let s,c=null,l=Pd(function(...t){s=e.apply(this,t),c=null},t,{edges:o}),u=function(...t){return a!=null&&(c===null&&(c=Date.now()),Date.now()-c>=a)?(s=e.apply(this,t),c=Date.now(),l.cancel(),l.schedule(),s):(l.apply(this,t),s)};return u.cancel=l.cancel,u.flush=()=>(l.flush(),s),u}function Id(e,t=0,n={}){let{leading:r=!0,trailing:i=!0}=n;return Fd(e,t,{leading:r,maxWait:t,trailing:i})}var Ld=function(e,t){var n=[...arguments].slice(2);if(typeof console<`u`&&console.warn&&(t===void 0&&console.warn(`LogUtils requires an error message argument`),!e))if(t===void 0)console.warn(`Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.`);else{var r=0;console.warn(t.replace(/%s/g,()=>n[r++]))}},Rd={width:`100%`,height:`100%`,debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},zd=(e,t,n)=>{var r=n.width,i=r===void 0?Rd.width:r,a=n.height,o=a===void 0?Rd.height:a,s=n.aspect,c=n.maxHeight,l=ii(i)?e:Number(i),u=ii(o)?t:Number(o);return s&&s>0&&(l?u=l/s:u&&(l=u*s),c&&u!=null&&u>c&&(u=c)),{calculatedWidth:l,calculatedHeight:u}},Bd={width:0,height:0,overflow:`visible`},Vd={width:0,overflowX:`visible`},Hd={height:0,overflowY:`visible`},Ud={},Wd=e=>{var t=e.width,n=e.height,r=ii(t),i=ii(n);return r&&i?Bd:r?Vd:i?Hd:Ud};function Gd(e){var t=e.width,n=e.height,r=e.aspect,i=t,a=n;return i===void 0&&a===void 0?(i=Rd.width,a=Rd.height):i===void 0?i=r&&r>0?void 0:Rd.width:a===void 0&&(a=r&&r>0?void 0:Rd.height),{width:i,height:a}}var Kd=[`aspect`,`initialDimension`,`width`,`height`,`minWidth`,`minHeight`,`maxHeight`,`children`,`debounce`,`id`,`className`,`onResize`,`style`];function qd(){return qd=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n({width:n,height:r}),[n,r]);return lf(i)?A.createElement(cf.Provider,{value:i},t):null}var df=()=>(0,A.useContext)(cf),ff=(0,A.forwardRef)((e,n)=>{var r=e.aspect,i=e.initialDimension,a=i===void 0?Rd.initialDimension:i,o=e.width,s=e.height,c=e.minWidth,l=c===void 0?Rd.minWidth:c,u=e.minHeight,d=e.maxHeight,f=e.children,p=e.debounce,m=p===void 0?Rd.debounce:p,h=e.id,g=e.className,_=e.onResize,v=e.style,y=v===void 0?{}:v,b=of(e,Kd),x=(0,A.useRef)(null),S=(0,A.useRef)();S.current=_,(0,A.useImperativeHandle)(n,()=>x.current);var C=$d((0,A.useState)({containerWidth:a.width,containerHeight:a.height}),2),w=C[0],T=C[1],E=(0,A.useCallback)((e,t)=>{T(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]);(0,A.useEffect)(()=>{if(x.current==null||typeof ResizeObserver>`u`)return pi;var e=e=>{var t,n=e[0];if(n!=null){var r=n.contentRect,i=r.width,a=r.height;E(i,a),(t=S.current)==null||t.call(S,i,a)}};m>0&&(e=Id(e,m,{trailing:!0,leading:!1}));var t=new ResizeObserver(e),n=x.current.getBoundingClientRect(),r=n.width,i=n.height;return E(r,i),t.observe(x.current),()=>{t.disconnect()}},[E,m]);var D=w.containerWidth,O=w.containerHeight;Ld(!r||r>0,`The aspect(%s) must be greater than zero.`,r);var k=zd(D,O,{width:o,height:s,aspect:r,maxHeight:d}),j=k.calculatedWidth,M=k.calculatedHeight;return Ld(D<0||O<0||j!=null&&j>0||M!=null&&M>0,`The width(%s) and height(%s) of chart should be greater than 0, + please check the style of container, or the props width(%s) and height(%s), + or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the + height and width.`,j,M,o,s,l,u,r),A.createElement(`div`,qd({id:h?`${h}`:void 0,className:t(`recharts-responsive-container`,g),style:Yd(Yd({},y),{},{width:o,height:s,minWidth:l,minHeight:u,maxHeight:d}),ref:x},b),A.createElement(`div`,{style:Wd({width:o,height:s})},A.createElement(uf,{width:j,height:M},f)))}),pf=(0,A.forwardRef)((e,t)=>{var n=df();if(Iu(n.width)&&Iu(n.height))return e.children;var r=Gd({width:e.width,height:e.height,aspect:e.aspect}),i=r.width,a=r.height,o=zd(void 0,void 0,{width:i,height:a,aspect:e.aspect,maxHeight:e.maxHeight}),s=o.calculatedWidth,c=o.calculatedHeight;return I(s)&&I(c)?A.createElement(uf,{width:s,height:c},e.children):A.createElement(ff,qd({},e,{width:i,height:a,ref:t}))}),mf=()=>{var e=jd(),t=B(Od),n=B(Nd),r=B(Md)?.padding;return!e||!n||!r?t:{width:n.width-r.left-r.right,height:n.height-r.top-r.bottom,x:r.left,y:r.top}},hf={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},gf=()=>B(Dd)??hf,_f=()=>B(ld),vf=()=>B(ud),K=e=>e.layout.layoutType,yf=()=>B(K),bf=()=>{var e=yf();if(e===`horizontal`||e===`vertical`)return e},xf=e=>{var t=e.layout.layoutType;if(t===`centric`||t===`radial`)return t},Sf=()=>B(xf),Cf=()=>yf()!==void 0,wf=e=>{var t=z(),n=jd(),r=e.width,i=e.height,a=df(),o=r,s=i;return a&&(o=a.width>0?a.width:r,s=a.height>0?a.height:i),(0,A.useEffect)(()=>{!n&&Iu(o)&&Iu(s)&&t(Mu({width:o,height:s}))},[t,n,o,s]),null},Tf=Bl({name:`legend`,initialState:{settings:{layout:`horizontal`,align:`center`,verticalAlign:`bottom`,itemSorter:`value`,position:void 0,offset:0},size:{width:0,height:0},payload:[]},reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter,e.settings.position=t.payload.position,e.settings.offset=t.payload.offset},addLegendPayload:{reducer(e,t){e.payload.push(H(t.payload))},prepare:U()},replaceLegendPayload:{reducer(e,t){var n=t.payload,r=n.prev,i=n.next,a=fl(e).payload.indexOf(H(r));a>-1&&(e.payload[a]=H(i))},prepare:U()},removeLegendPayload:{reducer(e,t){var n=fl(e).payload.indexOf(H(t.payload));n>-1&&e.payload.splice(n,1)},prepare:U()}}}),Ef=Tf.actions;Ef.setLegendSize,Ef.setLegendSettings;var Df=Ef.addLegendPayload,Of=Ef.replaceLegendPayload,kf=Ef.removeLegendPayload,Af=Tf.reducer,jf=_((e=>{var t=x();t.useSyncExternalStore,t.useRef,t.useEffect,t.useMemo,t.useDebugValue}));_(((e,t)=>{t.exports=jf()}))();function Mf(e){e()}function Nf(){let e=null,t=null;return{clear(){e=null,t=null},notify(){Mf(()=>{let t=e;for(;t;)t.callback(),t=t.next})},get(){let t=[],n=e;for(;n;)t.push(n),n=n.next;return t},subscribe(n){let r=!0,i=t={callback:n,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!r||e===null||(r=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var Pf={notify(){},get:()=>[]};function Ff(e,t){let n,r=Pf,i=0,a=!1;function o(e){u();let t=r.subscribe(e),n=!1;return()=>{n||(n=!0,t(),d())}}function s(){r.notify()}function c(){m.onStateChange&&m.onStateChange()}function l(){return a}function u(){i++,n||(n=t?t.addNestedSub(c):e.subscribe(c),r=Nf())}function d(){i--,n&&i===0&&(n(),n=void 0,r.clear(),r=Pf)}function f(){a||(a=!0,u())}function p(){a&&(a=!1,d())}let m={addNestedSub:o,notifyNestedSubs:s,handleChangeWrapper:c,isSubscribed:l,trySubscribe:f,tryUnsubscribe:p,getListeners:()=>r};return m}var If=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,Lf=typeof navigator<`u`&&navigator.product===`ReactNative`,Rf=If||Lf?A.useLayoutEffect:A.useEffect;function zf(e,t){return e===t?e!==0||t!==0||1/e==1/t:e!==e&&t!==t}function Bf(e,t){if(zf(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;let n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r{let e=Ff(i);return{store:i,subscription:e,getServerState:r?()=>r:void 0}},[i,r]),o=A.useMemo(()=>i.getState(),[i]);Rf(()=>{let{subscription:e}=a;return e.onStateChange=e.notifyNestedSubs,e.trySubscribe(),o!==i.getState()&&e.notifyNestedSubs(),()=>{e.tryUnsubscribe(),e.onStateChange=void 0}},[a,o]);let s=n||Wf;return A.createElement(s.Provider,{value:a},t)}var Kf=Gf,qf=new Set([`axisLine`,`tickLine`,`activeBar`,`activeDot`,`activeLabel`,`activeShape`,`allowEscapeViewBox`,`background`,`cursor`,`dot`,`label`,`line`,`margin`,`padding`,`position`,`shape`,`style`,`tick`,`wrapperStyle`,`radius`,`throttledEvents`]);function Jf(e,t){return e==null&&t==null?!0:typeof e==`number`&&typeof t==`number`?e===t||e!==e&&t!==t:e===t}function Yf(e,t){for(var n of new Set([...Object.keys(e),...Object.keys(t)]))if(qf.has(n)){if(e[n]==null&&t[n]==null)continue;if(!Bf(e[n],t[n]))return!1}else if(!Jf(e[n],t[n]))return!1;return!0}function Xf(){return Xf=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n{var n=e.separator,r=n===void 0?lp.separator:n,i=e.contentStyle,a=e.itemStyle,o=e.labelStyle,s=o===void 0?lp.labelStyle:o,c=e.payload,l=e.formatter,u=e.itemSorter,d=e.wrapperClassName,f=e.labelClassName,p=e.label,m=e.labelFormatter,h=e.accessibilityLayer,g=h===void 0?lp.accessibilityLayer:h,_=()=>{if(c&&c.length){var e={padding:0,margin:0},t=up(c,u).map((e,t)=>{if(!e||e.type===`none`)return null;var n=e.formatter||l||cp,i=e.value,o=e.name,s=i,u=o;if(n){var d=n(i,o,e,t,c);if(Array.isArray(d)){var f=np(d,2);s=f[0],u=f[1]}else if(d!=null)s=d;else return null}var p=Qf(Qf({},lp.itemStyle),{},{color:e.color||lp.itemStyle.color},a);return A.createElement(`li`,{className:`recharts-tooltip-item`,key:`tooltip-item-${t}`,style:p},ai(u)?A.createElement(`span`,{className:`recharts-tooltip-item-name`},u):null,ai(u)?A.createElement(`span`,{className:`recharts-tooltip-item-separator`},r):null,A.createElement(`span`,{className:`recharts-tooltip-item-value`},s),A.createElement(`span`,{className:`recharts-tooltip-item-unit`},e.unit||``))});return A.createElement(`ul`,{className:`recharts-tooltip-item-list`,style:e},t)}return null},v=Qf(Qf({},lp.contentStyle),i),y=Qf({margin:0},s),b=!R(p),x=b?p:``,S=t(`recharts-default-tooltip`,d),C=t(`recharts-tooltip-label`,f);b&&m&&c!=null&&(x=m(p,c));var w=g?{role:`status`,"aria-live":`assertive`}:{};return A.createElement(`div`,Xf({className:S,style:v},w),A.createElement(`p`,{className:C,style:y},A.isValidElement(x)?x:`${x}`),_())},fp=`recharts-tooltip-wrapper`,pp={visibility:`hidden`};function mp(e){var n=e.coordinate,r=e.translateX,i=e.translateY;return t(fp,{[`${fp}-right`]:I(r)&&n&&I(n.x)&&r>=n.x,[`${fp}-left`]:I(r)&&n&&I(n.x)&&r=n.y,[`${fp}-top`]:I(i)&&n&&I(n.y)&&i0?i:0),d=n[r]+i;if(t[r])return o[r]?u:d;var f=c[r];return f==null?0:o[r]?Math.max(uf+l?Math.max(u,f):Math.max(d,f)}function gp(e){var t=e.translateX,n=e.translateY;return{transform:e.useTranslate3d?`translate3d(${t}px, ${n}px, 0)`:`translate(${t}px, ${n}px)`}}function _p(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTop,i=e.offsetLeft,a=e.position,o=e.reverseDirection,s=e.tooltipBox,c=e.useTranslate3d,l=e.viewBox,u,d,f;return s&&s.height>0&&s.width>0&&n?(d=hp({allowEscapeViewBox:t,coordinate:n,key:`x`,offset:i,position:a,reverseDirection:o,tooltipDimension:s.width,viewBox:l,viewBoxDimension:l.width}),f=hp({allowEscapeViewBox:t,coordinate:n,key:`y`,offset:r,position:a,reverseDirection:o,tooltipDimension:s.height,viewBox:l,viewBoxDimension:l.height}),u=gp({translateX:d,translateY:f,useTranslate3d:c})):u=pp,{cssProperties:u,cssClasses:mp({translateX:d,translateY:f,coordinate:n})}}var vp={devToolsEnabled:!0,isSsr:!(typeof window<`u`&&window.document&&window.document.createElement&&window.setTimeout)};function yp(e,t){return wp(e)||Cp(e,t)||xp(e,t)||bp()}function bp(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xp(e,t){if(e){if(typeof e==`string`)return Sp(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Sp(e,t):void 0}}function Sp(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nvp.isSsr||!window.matchMedia?!1:window.matchMedia(`(prefers-reduced-motion: reduce)`).matches),2),t=e[0],n=e[1];return(0,A.useEffect)(()=>{if(window.matchMedia){var e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=()=>{n(e.matches)};return e.addEventListener(`change`,t),()=>{e.removeEventListener(`change`,t)}}},[]),t}function Ep(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Dp(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n({dismissed:!1,dismissedAtCoordinate:{x:0,y:0}})),2),r=n[0],i=n[1];A.useEffect(()=>{var t=t=>{t.key===`Escape`&&i({dismissed:!0,dismissedAtCoordinate:{x:e.coordinate?.x??0,y:e.coordinate?.y??0}})};return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t)}},[e.coordinate?.x,e.coordinate?.y]),r.dismissed&&((e.coordinate?.x??0)!==r.dismissedAtCoordinate.x||(e.coordinate?.y??0)!==r.dismissedAtCoordinate.y)&&i(Dp(Dp({},r),{},{dismissed:!1}));var a=_p({allowEscapeViewBox:e.allowEscapeViewBox,coordinate:e.coordinate,offsetLeft:typeof e.offset==`number`?e.offset:e.offset.x,offsetTop:typeof e.offset==`number`?e.offset:e.offset.y,position:e.position,reverseDirection:e.reverseDirection,tooltipBox:e.lastBoundingBox,useTranslate3d:e.useTranslate3d,viewBox:e.viewBox}),o=a.cssClasses,s=a.cssProperties,c=Dp(Dp({},e.hasPortalFromProps?{}:Dp(Dp({transition:Lp({prefersReducedMotion:t,isAnimationActive:e.isAnimationActive,active:e.active,animationDuration:e.animationDuration,animationEasing:e.animationEasing})},s),{},{pointerEvents:`none`,position:`absolute`,top:0,left:0})),{},{visibility:!r.dismissed&&e.active&&e.hasPayload?`visible`:`hidden`},e.wrapperStyle);return A.createElement(`div`,{xmlns:`http://www.w3.org/1999/xhtml`,tabIndex:-1,className:o,style:c,ref:e.innerRef},e.children)}var zp=A.memo(Rp),Bp=()=>B(e=>e.rootProps.accessibilityLayer)??!0;function Vp(){return Vp=Object.assign?Object.assign.bind():function(e){for(var t=1;tW(e.x)&&W(e.y),Yp=e=>e.base!=null&&Jp(e.base)&&Jp(e),Xp=e=>e.x,Zp=e=>e.y,Qp=(e,t)=>{if(typeof e==`function`)return e;var n=`curve${di(e)}`;if((n===`curveMonotone`||n===`curveBump`)&&t){var r=qp[`${n}${t===`vertical`?`Y`:`X`}`];if(r)return r}return qp[n]||Ii},$p={connectNulls:!1,type:`linear`},em=e=>{var t=e.type,n=t===void 0?$p.type:t,r=e.points,i=r===void 0?[]:r,a=e.baseLine,o=e.layout,s=e.connectNulls,c=s===void 0?$p.connectNulls:s,l=Qp(n,o),u=c?i.filter(Jp):i;if(Array.isArray(a)){var d,f=i.map((e,t)=>Up(Up({},e),{},{base:a[t]}));return d=o===`vertical`?Bi().y(Zp).x1(Xp).x0(e=>e.base.x):Bi().x(Xp).y1(Zp).y0(e=>e.base.y),d.defined(Yp).curve(l)(c?f.filter(Yp):f)}return(o===`vertical`&&I(a)?Bi().y(Zp).x1(Xp).x0(a):I(a)?Bi().x(Xp).y1(Zp).y0(a):zi().x(Xp).y(Zp)).defined(Jp).curve(l)(u)},tm=e=>{var n=e.className,r=e.points,i=e.path,a=e.pathRef,o=yf();if((!r||!r.length)&&!i)return null;var s={type:e.type,points:e.points,baseLine:e.baseLine,layout:e.layout||o,connectNulls:e.connectNulls},c=r&&r.length?em(s):i;return A.createElement(`path`,Vp({},Nr(e),Ta(e),{className:t(`recharts-curve`,n),d:c===null?void 0:c,ref:a}))},nm=[`x`,`y`,`top`,`left`,`width`,`height`,`className`];function rm(){return rm=Object.assign?Object.assign.bind():function(e){for(var t=1;t`M${e},${i}v${r}M${a},${t}h${n}`,fm=e=>{var n=e.x,r=n===void 0?0:n,i=e.y,a=i===void 0?0:i,o=e.top,s=o===void 0?0:o,c=e.left,l=c===void 0?0:c,u=e.width,d=u===void 0?0:u,f=e.height,p=f===void 0?0:f,m=e.className,h=lm(e,nm),g=am({x:r,y:a,top:s,left:l,width:d,height:p},h);return!I(r)||!I(a)||!I(d)||!I(p)||!I(s)||!I(l)?null:A.createElement(`path`,rm({},Fr(g),{className:t(`recharts-cross`,m),d:dm(r,a,d,p,s,l)}))};function pm(e,t,n,r){var i=r/2;return{stroke:`none`,fill:`#ccc`,x:e===`horizontal`?t.x-i:n.left+.5,y:e===`horizontal`?n.top+.5:t.y-i,width:e===`horizontal`?r:n.width-1,height:e===`horizontal`?n.height-1:r}}var mm=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],hm=(e,t)=>e.map((e,n)=>e*t**n).reduce((e,t)=>e+t),gm=(e,t)=>n=>hm(mm(e,t),n),_m=(e,t)=>n=>hm([...mm(e,t).map((e,t)=>e*t).slice(1),0],n),vm=e=>{var t,n=e.split(`(`);if(n.length!==2||n[0]!==`cubic-bezier`)return null;var r=(t=n[1])==null||(t=t.split(`)`)[0])==null?void 0:t.split(`,`);if(r==null||r.length!==4)return null;var i=r.map(e=>parseFloat(e));return[i[0],i[1],i[2],i[3]]},ym=function(){var e=[...arguments];if(e.length===1)switch(e[0]){case`linear`:return[0,0,1,1];case`ease`:return[.25,.1,.25,1];case`ease-in`:return[.42,0,1,1];case`ease-out`:return[.42,0,.58,1];case`ease-in-out`:return[0,0,.58,1];default:var t=vm(e[0]);if(t)return t}return e.length===4?e:[0,0,1,1]},bm=(e,t,n,r)=>{var i=gm(e,n),a=gm(t,r),o=_m(e,n),s=e=>e>1?1:e<0?0:e,c=e=>{for(var t=e>1?1:e,n=t,r=0;r<8;++r){var c=i(n)-t,l=o(n);if(Math.abs(c-t)<1e-4||l<1e-4)return a(n);n=s(n-c/l)}return a(n)};return c.isStepper=!1,c},xm=function(){return bm(...ym(...arguments))},Sm=function(){for(var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.stiff,n=t===void 0?100:t,r=e.damping,i=r===void 0?8:r,a=e.dt,o=a===void 0?16.67:a,s=1,c=[0],l=0,u=0,d=1e4,f=0;f{if(e<=0)return 0;if(e>=1)return s;var t=e*h,n=Math.floor(t),r=t-n;return(c[n]??0)+((c[n+1]??0)-(c[n]??0))*r}},Cm=e=>{if(typeof e==`string`)switch(e){case`ease`:case`ease-in-out`:case`ease-out`:case`ease-in`:case`linear`:return xm(e);case`spring`:return Sm();default:if(e.split(`(`)[0]===`cubic-bezier`)return xm(e)}return typeof e==`function`?e:null},wm=(0,A.createContext)((e,t,n)=>{var r,i=a=>{var o=t.tick(a);if(t.getState()===`active`){if(n(t.getInterpolated()),t.getProgress()===1){t.complete(),r=void 0;return}r=e.setTimeout(i,o);return}r=e.setTimeout(i,o)};return r=e.setTimeout(i,0),()=>r?.()});wm.Provider;function Tm(e){var t=(0,A.useContext)(wm);return(0,A.useMemo)(()=>e??t,[e,t])}function Em(e,t,n){return(t=Dm(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Dm(e){var t=Om(e,`string`);return typeof t==`symbol`?t:t+``}function Om(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var km=`init`,Am=`pending`,jm=`active`,Mm=`completed`;function Nm(e){return Math.max(0,e)}var Pm=class{getAnimationStartedTime(){return this.animationStartedTime}getBeginStartedTime(){return this.beginStartedTime}constructor(e){var t;Em(this,`state`,km),this.animationId=e.animationId,this.onAnimationEnd=e.onAnimationEnd,this.animationDuration=Nm(e.animationDuration),this.animationBegin=Nm(e.animationBegin),this.progress=0,this.from=e.from,this.to=e.to,this.easing=e.easing,(t=e.onAnimationStart)==null||t.call(e)}getState(){return this.state}getEasing(){return this.easing}getAnimationDuration(){return this.animationDuration}tick(e){if(this.getState()===km)return this.state=Am,this.beginStartedTime=e,this.animationBegin;if(this.getState()===Am){if(this.beginStartedTime==null)throw Error();var t=e-this.beginStartedTime;return t>=this.animationBegin?(this.state=jm,this.animationStartedTime=e,this.nextAnimationUpdate(0)):Nm(this.animationBegin-t)}if(this.getState()===jm){if(this.animationStartedTime==null)throw Error();var n=e-this.animationStartedTime;return this.setProgress(n/this.animationDuration),this.nextAnimationUpdate(n)}return 0}setProgress(e){this.progress=Math.min(1,Math.max(0,e))}getProgress(){return this.progress}complete(){if(this.progress=1,this.state===`active`){var e;(e=this.onAnimationEnd)==null||e.call(this)}this.state=Mm}getFrom(){return this.from}getTo(){return this.to}getAnimationId(){return this.animationId}getAnimationBegin(){return this.animationBegin}},Fm=class extends Pm{nextAnimationUpdate(){return 0}getInterpolated(){return this.easing(L(this.getFrom(),this.getTo(),this.getProgress()))}},Im=class{setTimeout(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),r=null,i=a=>{a-n>=t?e(a):r=requestAnimationFrame(i)};return r=requestAnimationFrame(i),()=>{r!=null&&cancelAnimationFrame(r)}}};function Lm(e,t){return Hm(e)||Vm(e,t)||zm(e,t)||Rm()}function Rm(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zm(e,t){if(e){if(typeof e==`string`)return Bm(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Bm(e,t):void 0}}function Bm(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{},onAnimationStart:()=>{}},Wm=0,Gm=1;function Km(e){var t=Na(e,Um),n=t.animationId,r=t.isActive,i=t.canBegin,a=t.duration,o=t.easing,s=t.begin,c=t.onAnimationEnd,l=t.onAnimationStart,u=t.children,d=Tp(),f=r===`auto`?!vp.isSsr&&!d:r,p=Tm(t.animationController),m=Lm((0,A.useState)(f?Wm:Gm),2),h=m[0],g=m[1];return(0,A.useEffect)(()=>{f||g(Gm)},[f]),(0,A.useEffect)(()=>{var e=Cm(o);return!f||!i||e==null?pi:p(new Im,new Fm({animationId:n,easing:e,animationDuration:a,animationBegin:s,onAnimationStart:l,onAnimationEnd:c,from:Wm,to:Gm}),g)},[p,n,f,i,a,o,s,l,c]),u(Number(h))}function qm(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`animation-`,n=(0,A.useRef)(si(t)),r=(0,A.useRef)(e);return r.current!==e&&(n.current=si(t),r.current=e),n.current}var Jm=e=>e.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`),Ym=(e,t,n)=>e.map(e=>`${Jm(e)} ${t}ms ${n}`).join(`,`),Xm=[`radius`],Zm=[`radius`],Qm,$m,eh,th,nh,rh,ih,ah,oh,sh;function ch(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function lh(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n{var a=ei(n),o=ei(r),s=Math.min(Math.abs(a)/2,Math.abs(o)/2),c=o>=0?1:-1,l=a>=0?1:-1,u=+(o>=0&&a>=0||o<0&&a<0),d;if(s>0&&Array.isArray(i)){for(var f=[0,0,0,0],p=0,m=4;ps?s:h}d=ti(Qm||=Sh([`M`,`,`,``]),e,t+c*f[0]),f[0]>0&&(d+=ti($m||=Sh([`A `,`,`,`,0,0,`,`,`,`,`,``]),f[0],f[0],u,e+l*f[0],t)),d+=ti(eh||=Sh([`L `,`,`,``]),e+n-l*f[1],t),f[1]>0&&(d+=ti(th||=Sh([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[1],f[1],u,e+n,t+c*f[1])),d+=ti(nh||=Sh([`L `,`,`,``]),e+n,t+r-c*f[2]),f[2]>0&&(d+=ti(rh||=Sh([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[2],f[2],u,e+n-l*f[2],t+r)),d+=ti(ih||=Sh([`L `,`,`,``]),e+l*f[3],t+r),f[3]>0&&(d+=ti(ah||=Sh([`A `,`,`,`,0,0,`,`, + `,`,`,``]),f[3],f[3],u,e,t+r-c*f[3])),d+=`Z`}else if(s>0&&i===+i&&i>0){var g=Math.min(s,i);d=ti(oh||=Sh(`M .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. + L .,. + A .,.,0,0,.,.,. Z`.split(`.`)),e,t+c*g,g,g,u,e+l*g,t,e+n-l*g,t,g,g,u,e+n,t+c*g,e+n,t+r-c*g,g,g,u,e+n-l*g,t+r,e+l*g,t+r,g,g,u,e,t+r-c*g)}else d=ti(sh||=Sh([`M `,`,`,` h `,` v `,` h `,` Z`]),e,t,n,r,-n);return d},wh={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:`ease`},Th=e=>{var n=Na(e,wh),r=(0,A.useRef)(null),i=gh((0,A.useState)(-1),2),a=i[0],o=i[1];(0,A.useEffect)(()=>{if(r.current&&r.current.getTotalLength)try{var e=r.current.getTotalLength();e&&o(e)}catch{}},[]);var s=n.x,c=n.y,l=n.width,u=n.height,d=n.radius,f=n.className,p=n.animationEasing,m=n.animationDuration,h=n.animationBegin,g=n.isAnimationActive,_=n.isUpdateAnimationActive,v=(0,A.useRef)(l),y=(0,A.useRef)(u),b=(0,A.useRef)(s),x=(0,A.useRef)(c),S=qm((0,A.useMemo)(()=>({x:s,y:c,width:l,height:u,radius:d}),[s,c,l,u,d]),`rectangle-`);if(s!==+s||c!==+c||l!==+l||u!==+u||l===0||u===0)return null;var C=t(`recharts-rectangle`,f);if(!_){var w=Fr(n);w.radius;var T=mh(w,Xm);return A.createElement(`path`,ph({},T,{x:ei(s),y:ei(c),width:ei(l),height:ei(u),radius:typeof d==`number`?d:void 0,className:C,d:Ch(s,c,l,u,d)}))}var E=v.current,D=y.current,O=b.current,k=x.current,j=`0px ${a===-1?1:a}px`,M=`${a}px ${a}px`,N=Ym([`strokeDasharray`],m,typeof p==`string`?p:wh.animationEasing);return A.createElement(Km,{animationId:S,key:S,canBegin:a>0,duration:m,easing:p,isActive:_,begin:h},e=>{var t=L(E,l,e),i=L(D,u,e),a=L(O,s,e),o=L(k,c,e);r.current&&(v.current=t,y.current=i,b.current=a,x.current=o);var f=g?e>0?{transition:N,strokeDasharray:M}:{strokeDasharray:j}:{strokeDasharray:M},p=Fr(n);p.radius;var m=mh(p,Zm);return A.createElement(`path`,ph({},m,{radius:typeof d==`number`?d:void 0,className:C,d:Ch(a,o,t,i,d),ref:r,style:lh(lh({},f),n.style)}))})};function Eh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Dh(e){for(var t=1;te*180/Math.PI,Nh=(e,t,n,r)=>({x:e+Math.cos(-jh*r)*n,y:t+Math.sin(-jh*r)*n}),Ph=function(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0,width:0,height:0,brushBottom:0};return Math.min(Math.abs(e-(n.left||0)-(n.right||0)),Math.abs(t-(n.top||0)-(n.bottom||0)))/2},Fh=(e,t)=>{var n=e.x,r=e.y,i=t.x,a=t.y;return Math.sqrt((n-i)**2+(r-a)**2)},Ih=(e,t)=>{var n=e.x,r=e.y,i=t.cx,a=t.cy,o=Fh({x:n,y:r},{x:i,y:a});if(o<=0)return{radius:o,angle:0};var s=(n-i)/o,c=Math.acos(s);return r>a&&(c=2*Math.PI-c),{radius:o,angle:Mh(c),angleInRadian:c}},Lh=e=>{var t=e.startAngle,n=e.endAngle,r=Math.floor(t/360),i=Math.floor(n/360),a=Math.min(r,i);return{startAngle:t-a*360,endAngle:n-a*360}},Rh=(e,t)=>{var n=t.startAngle,r=t.endAngle,i=Math.floor(n/360),a=Math.floor(r/360);return e+Math.min(i,a)*360},zh=(e,t)=>{var n=e.relativeX,r=e.relativeY,i=Ih({x:n,y:r},t),a=i.radius,o=i.angle,s=t.innerRadius,c=t.outerRadius;if(ac||a===0)return null;var l=Lh(t),u=l.startAngle,d=l.endAngle,f=o,p;if(u<=d){for(;f>d;)f-=360;for(;f=u&&f<=d}else{for(;f>u;)f-=360;for(;f=d&&f<=u}return p?Dh(Dh({},t),{},{radius:a,angle:Rh(f,t)}):null};function Bh(e){var t=e.cx,n=e.cy,r=e.radius,i=e.startAngle,a=e.endAngle;return{points:[Nh(t,n,r,i),Nh(t,n,r,a)],cx:t,cy:n,radius:r,startAngle:i,endAngle:a}}var Vh,Hh,Uh,Wh,Gh,Kh,qh;function Jh(){return Jh=Object.assign?Object.assign.bind():function(e){for(var t=1;tni(t-e)*Math.min(Math.abs(t-e),359.999),Zh=e=>{var t=e.cx,n=e.cy,r=e.radius,i=e.angle,a=e.sign,o=e.isExternal,s=e.cornerRadius,c=e.cornerIsExternal,l=s*(o?1:-1)+r,u=Math.asin(s/l)/jh,d=c?i:i+a*u,f=Nh(t,n,l,d),p=Nh(t,n,r,d),m=c?i-a*u:i;return{center:f,circleTangency:p,lineTangency:Nh(t,n,l*Math.cos(u*jh),m),theta:u}},Qh=e=>{var t=e.cx,n=e.cy,r=e.innerRadius,i=e.outerRadius,a=e.startAngle,o=e.endAngle,s=Xh(a,o),c=a+s,l=Nh(t,n,i,a),u=Nh(t,n,i,c),d=ti(Vh||=Yh([`M `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` + `]),l.x,l.y,i,i,+(Math.abs(s)>180),+(a>c),u.x,u.y);if(r>0){var f=Nh(t,n,r,a),p=Nh(t,n,r,c);d+=ti(Hh||=Yh([`L `,`,`,` + A `,`,`,`,0, + `,`,`,`, + `,`,`,` Z`]),p.x,p.y,r,r,+(Math.abs(s)>180),+(a<=c),f.x,f.y)}else d+=ti(Uh||=Yh([`L `,`,`,` Z`]),t,n);return d},$h=e=>{var t=e.cx,n=e.cy,r=e.innerRadius,i=e.outerRadius,a=e.cornerRadius,o=e.forceCornerRadius,s=e.cornerIsExternal,c=e.startAngle,l=e.endAngle,u=ni(l-c),d=Zh({cx:t,cy:n,radius:i,angle:c,sign:u,cornerRadius:a,cornerIsExternal:s}),f=d.circleTangency,p=d.lineTangency,m=d.theta,h=Zh({cx:t,cy:n,radius:i,angle:l,sign:-u,cornerRadius:a,cornerIsExternal:s}),g=h.circleTangency,_=h.lineTangency,v=h.theta,y=s?Math.abs(c-l):Math.abs(c-l)-m-v;if(y<0)return o?ti(Wh||=Yh([`M `,`,`,` + a`,`,`,`,0,0,1,`,`,0 + a`,`,`,`,0,0,1,`,`,0 + `]),p.x,p.y,a,a,a*2,a,a,-a*2):Qh({cx:t,cy:n,innerRadius:r,outerRadius:i,startAngle:c,endAngle:l});var b=ti(Gh||=Yh([`M `,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + A`,`,`,`,0,`,`,`,`,`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + `]),p.x,p.y,a,a,+(u<0),f.x,f.y,i,i,+(y>180),+(u<0),g.x,g.y,a,a,+(u<0),_.x,_.y);if(r>0){var x=Zh({cx:t,cy:n,radius:r,angle:c,sign:u,isExternal:!0,cornerRadius:a,cornerIsExternal:s}),S=x.circleTangency,C=x.lineTangency,w=x.theta,T=Zh({cx:t,cy:n,radius:r,angle:l,sign:-u,isExternal:!0,cornerRadius:a,cornerIsExternal:s}),E=T.circleTangency,D=T.lineTangency,O=T.theta,k=s?Math.abs(c-l):Math.abs(c-l)-w-O;if(k<0&&a===0)return`${b}L${t},${n}Z`;b+=ti(Kh||=Yh([`L`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,` + A`,`,`,`,0,`,`,`,`,`,`,`,` + A`,`,`,`,0,0,`,`,`,`,`,`Z`]),D.x,D.y,a,a,+(u<0),E.x,E.y,r,r,+(k>180),+(u>0),S.x,S.y,a,a,+(u<0),C.x,C.y)}else b+=ti(qh||=Yh([`L`,`,`,`Z`]),t,n);return b},eg={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},tg=e=>{var n=Na(e,eg),r=n.cx,i=n.cy,a=n.innerRadius,o=n.outerRadius,s=n.cornerRadius,c=n.forceCornerRadius,l=n.cornerIsExternal,u=n.startAngle,d=n.endAngle,f=n.className;if(o0&&Math.abs(u-d)<360?$h({cx:r,cy:i,innerRadius:a,outerRadius:o,cornerRadius:Math.min(h,m/2),forceCornerRadius:c,cornerIsExternal:l,startAngle:u,endAngle:d}):Qh({cx:r,cy:i,innerRadius:a,outerRadius:o,startAngle:u,endAngle:d});return A.createElement(`path`,Jh({},Fr(n),{className:p,d:g}))};function ng(e,t,n){if(e===`horizontal`)return[{x:t.x,y:n.top},{x:t.x,y:n.top+n.height}];if(e===`vertical`)return[{x:n.left,y:t.y},{x:n.left+n.width,y:t.y}];if(wa(t)){if(e===`centric`){var r=t.cx,i=t.cy,a=t.innerRadius,o=t.outerRadius,s=t.angle,c=Nh(r,i,a,s),l=Nh(r,i,o,s);return[{x:c.x,y:c.y},{x:l.x,y:l.y}]}return Bh(t)}}function rg(e){return vs(e)?NaN:Number(e)}function ig(e){return e?(e=rg(e),e===1/0||e===-1/0?(e<0?-1:1)*Number.MAX_VALUE:e===e?e:0):e===0?e:0}function ag(e,t,n){n&&typeof n!=`number`&&hs(e,t,n)&&(t=n=void 0),e=ig(e),t===void 0?(t=e,e=0):t=ig(t),n=n===void 0?ee.chartData,sg=V([og],e=>{var t=e.chartData==null?0:e.chartData.length-1;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),cg=(e,t,n,r)=>r?sg(e):og(e),lg=(e,t,n)=>n?sg(e):og(e),ug=V([cg],e=>{var t=e.chartData,n=e.dataStartIndex,r=e.dataEndIndex;return t==null?[]:t.slice(n,r+1)}),dg=V([sg],e=>{var t=e.chartData,n=e.dataStartIndex,r=e.dataEndIndex;return t==null?[]:t.slice(n,r+1)}),fg=V([og],e=>{var t=e.chartData,n=e.dataStartIndex,r=e.dataEndIndex;return t==null?[]:t.slice(n,r+1)});function pg(e,t){return vg(e)||_g(e,t)||hg(e,t)||mg()}function mg(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function hg(e,t){if(e){if(typeof e==`string`)return gg(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?gg(e,t):void 0}}function gg(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{(function(e){var n=1e9,r={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:`2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286`},i=!0,a=`[DecimalError] `,o=a+`Invalid argument: `,s=a+`Exponent out of range: `,c=Math.floor,l=Math.pow,u=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,d,f=1e7,p=7,m=9007199254740991,h=c(m/p),g={};g.absoluteValue=g.abs=function(){var e=new this.constructor(this);return e.s&&=1,e},g.comparedTo=g.cmp=function(e){var t,n,r,i,a=this;if(e=new a.constructor(e),a.s!==e.s)return a.s||-e.s;if(a.e!==e.e)return a.e>e.e^a.s<0?1:-1;for(r=a.d.length,i=e.d.length,t=0,n=re.d[t]^a.s<0?1:-1;return r===i?0:r>i^a.s<0?1:-1},g.decimalPlaces=g.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*p;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n},g.dividedBy=g.div=function(e){return b(this,new this.constructor(e))},g.dividedToIntegerBy=g.idiv=function(e){var t=this,n=t.constructor;return D(b(t,new n(e),0,1),n.precision)},g.equals=g.eq=function(e){return!this.cmp(e)},g.exponent=function(){return S(this)},g.greaterThan=g.gt=function(e){return this.cmp(e)>0},g.greaterThanOrEqualTo=g.gte=function(e){return this.cmp(e)>=0},g.isInteger=g.isint=function(){return this.e>this.d.length-2},g.isNegative=g.isneg=function(){return this.s<0},g.isPositive=g.ispos=function(){return this.s>0},g.isZero=function(){return this.s===0},g.lessThan=g.lt=function(e){return this.cmp(e)<0},g.lessThanOrEqualTo=g.lte=function(e){return this.cmp(e)<1},g.logarithm=g.log=function(e){var t,n=this,r=n.constructor,o=r.precision,s=o+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(d))throw Error(a+`NaN`);if(n.s<1)throw Error(a+(n.s?`NaN`:`-Infinity`));return n.eq(d)?new r(0):(i=!1,t=b(T(n,s),T(e,s),s),i=!0,D(t,o))},g.minus=g.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?O(t,e):_(t,(e.s=-e.s,e))},g.modulo=g.mod=function(e){var t,n=this,r=n.constructor,o=r.precision;if(e=new r(e),!e.s)throw Error(a+`NaN`);return n.s?(i=!1,t=b(n,e,0,1).times(e),i=!0,n.minus(t)):D(new r(n),o)},g.naturalExponential=g.exp=function(){return x(this)},g.naturalLogarithm=g.ln=function(){return T(this)},g.negated=g.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e},g.plus=g.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?_(t,e):O(t,(e.s=-e.s,e))},g.precision=g.sd=function(e){var t,n,r,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(o+e);if(t=S(i)+1,r=i.d.length-1,n=r*p+1,r=i.d[r],r){for(;r%10==0;r/=10)n--;for(r=i.d[0];r>=10;r/=10)n++}return e&&t>n?t:n},g.squareRoot=g.sqrt=function(){var e,t,n,r,o,s,l,u=this,d=u.constructor;if(u.s<1){if(!u.s)return new d(0);throw Error(a+`NaN`)}for(e=S(u),i=!1,o=Math.sqrt(+u),o==0||o==1/0?(t=y(u.d),(t.length+e)%2==0&&(t+=`0`),o=Math.sqrt(t),e=c((e+1)/2)-(e<0||e%2),o==1/0?t=`5e`+e:(t=o.toExponential(),t=t.slice(0,t.indexOf(`e`)+1)+e),r=new d(t)):r=new d(o.toString()),n=d.precision,o=l=n+3;;)if(s=r,r=s.plus(b(u,s,l+2)).times(.5),y(s.d).slice(0,l)===(t=y(r.d)).slice(0,l)){if(t=t.slice(l-3,l+1),o==l&&t==`4999`){if(D(s,n+1,0),s.times(s).eq(u)){r=s;break}}else if(t!=`9999`)break;l+=4}return i=!0,D(r,n)},g.times=g.mul=function(e){var t,n,r,a,o,s,c,l,u,d=this,p=d.constructor,m=d.d,h=(e=new p(e)).d;if(!d.s||!e.s)return new p(0);for(e.s*=d.s,n=d.e+e.e,l=m.length,u=h.length,l=0;){for(t=0,a=l+r;a>r;)c=o[a]+h[r]*m[a-r-1]+t,o[a--]=c%f|0,t=c/f|0;o[a]=(o[a]+t)%f|0}for(;!o[--s];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,i?D(e,p.precision):e},g.toDecimalPlaces=g.todp=function(e,t){var r=this,i=r.constructor;return r=new i(r),e===void 0?r:(v(e,0,n),t===void 0?t=i.rounding:v(t,0,8),D(r,e+S(r)+1,t))},g.toExponential=function(e,t){var r,i=this,a=i.constructor;return e===void 0?r=k(i,!0):(v(e,0,n),t===void 0?t=a.rounding:v(t,0,8),i=D(new a(i),e+1,t),r=k(i,!0,e+1)),r},g.toFixed=function(e,t){var r,i,a=this,o=a.constructor;return e===void 0?k(a):(v(e,0,n),t===void 0?t=o.rounding:v(t,0,8),i=D(new o(a),e+S(a)+1,t),r=k(i.abs(),!1,e+S(i)+1),a.isneg()&&!a.isZero()?`-`+r:r)},g.toInteger=g.toint=function(){var e=this,t=e.constructor;return D(new t(e),S(e)+1,t.rounding)},g.toNumber=function(){return+this},g.toPower=g.pow=function(e){var t,n,r,o,s,l,u=this,f=u.constructor,h=12,g=+(e=new f(e));if(!e.s)return new f(d);if(u=new f(u),!u.s){if(e.s<1)throw Error(a+`Infinity`);return u}if(u.eq(d))return u;if(r=f.precision,e.eq(d))return D(u,r);if(t=e.e,n=e.d.length-1,l=t>=n,s=u.s,!l){if(s<0)throw Error(a+`NaN`)}else if((n=g<0?-g:g)<=m){for(o=new f(d),t=Math.ceil(r/p+4),i=!1;n%2&&(o=o.times(u),A(o.d,t)),n=c(n/2),n!==0;)u=u.times(u),A(u.d,t);return i=!0,e.s<0?new f(d).div(o):D(o,r)}return s=s<0&&e.d[Math.max(t,n)]&1?-1:1,u.s=1,i=!1,o=e.times(T(u,r+h)),i=!0,o=x(o),o.s=s,o},g.toPrecision=function(e,t){var r,i,a=this,o=a.constructor;return e===void 0?(r=S(a),i=k(a,r<=o.toExpNeg||r>=o.toExpPos)):(v(e,1,n),t===void 0?t=o.rounding:v(t,0,8),a=D(new o(a),e,t),r=S(a),i=k(a,e<=r||r<=o.toExpNeg,e)),i},g.toSignificantDigits=g.tosd=function(e,t){var r=this,i=r.constructor;return e===void 0?(e=i.precision,t=i.rounding):(v(e,1,n),t===void 0?t=i.rounding:v(t,0,8)),D(new i(r),e,t)},g.toString=g.valueOf=g.val=g.toJSON=function(){var e=this,t=S(e),n=e.constructor;return k(e,t<=n.toExpNeg||t>=n.toExpPos)};function _(e,t){var n,r,a,o,s,c,l,u,d=e.constructor,m=d.precision;if(!e.s||!t.s)return t.s||(t=new d(e)),i?D(t,m):t;if(l=e.d,u=t.d,s=e.e,a=t.e,l=l.slice(),o=s-a,o){for(o<0?(r=l,o=-o,c=u.length):(r=u,a=s,c=l.length),s=Math.ceil(m/p),c=s>c?s+1:c+1,o>c&&(o=c,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(c=l.length,o=u.length,c-o<0&&(o=c,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/f|0,l[o]%=f;for(n&&(l.unshift(n),++a),c=l.length;l[--c]==0;)l.pop();return t.d=l,t.e=a,i?D(t,m):t}function v(e,t,n){if(e!==~~e||en)throw Error(o+e)}function y(e){var t,n,r,i=e.length-1,a=``,o=e[0];if(i>0){for(a+=o,t=1;tr?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function n(e,t,n){for(var r=0;n--;)e[n]-=r,r=+(e[n]1;)e.shift()}return function(r,i,o,s){var c,l,u,d,m,h,g,_,v,y,b,x,C,w,T,E,O,k,A=r.constructor,j=r.s==i.s?1:-1,M=r.d,N=i.d;if(!r.s)return new A(r);if(!i.s)throw Error(a+`Division by zero`);for(l=r.e-i.e,O=N.length,T=M.length,g=new A(j),_=g.d=[],u=0;N[u]==(M[u]||0);)++u;if(N[u]>(M[u]||0)&&--l,x=o==null?o=A.precision:s?o+(S(r)-S(i))+1:o,x<0)return new A(0);if(x=x/p+2|0,u=0,O==1)for(d=0,N=N[0],x++;(u1&&(N=e(N,d),M=e(M,d),O=N.length,T=M.length),w=O,v=M.slice(0,O),y=v.length;y=f/2&&++E;do d=0,c=t(N,v,O,y),c<0?(b=v[0],O!=y&&(b=b*f+(v[1]||0)),d=b/E|0,d>1?(d>=f&&(d=f-1),m=e(N,d),h=m.length,y=v.length,c=t(m,v,h,y),c==1&&(d--,n(m,O16)throw Error(s+S(e));if(!e.s)return new m(d);for(t==null?(i=!1,u=h):u=t,c=new m(.03125);e.abs().gte(.1);)e=e.times(c),p+=5;for(r=Math.log(l(2,p))/Math.LN10*2+5|0,u+=r,n=a=o=new m(d),m.precision=u;;){if(a=D(a.times(e),u),n=n.times(++f),c=o.plus(b(a,n,u)),y(c.d).slice(0,u)===y(o.d).slice(0,u)){for(;p--;)o=D(o.times(o),u);return m.precision=h,t==null?(i=!0,D(o,h)):o}o=c}}function S(e){for(var t=e.e*p,n=e.d[0];n>=10;n/=10)t++;return t}function C(e,t,n){if(t>e.LN10.sd())throw i=!0,n&&(e.precision=n),Error(a+`LN10 precision limit exceeded`);return D(new e(e.LN10),t)}function w(e){for(var t=``;e--;)t+=`0`;return t}function T(e,t){var n,r,o,s,c,l,u,f,p,m=1,h=10,g=e,_=g.d,v=g.constructor,x=v.precision;if(g.s<1)throw Error(a+(g.s?`NaN`:`-Infinity`));if(g.eq(d))return new v(0);if(t==null?(i=!1,f=x):f=t,g.eq(10))return t??(i=!0),C(v,f);if(f+=h,v.precision=f,n=y(_),r=n.charAt(0),s=S(g),Math.abs(s)<0x5543df729c000){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)g=g.times(e),n=y(g.d),r=n.charAt(0),m++;s=S(g),r>1?(g=new v(`0.`+n),s++):g=new v(r+`.`+n.slice(1))}else return u=C(v,f+2,x).times(s+``),g=T(new v(r+`.`+n.slice(1)),f-h).plus(u),v.precision=x,t==null?(i=!0,D(g,x)):g;for(l=c=g=b(g.minus(d),g.plus(d),f),p=D(g.times(g),f),o=3;;){if(c=D(c.times(p),f),u=l.plus(b(c,new v(o),f)),y(u.d).slice(0,f)===y(l.d).slice(0,f))return l=l.times(2),s!==0&&(l=l.plus(C(v,f+2,x).times(s+``))),l=b(l,new v(m),f),v.precision=x,t==null?(i=!0,D(l,x)):l;l=u,o+=2}}function E(e,t){var n,r,a;for((n=t.indexOf(`.`))>-1&&(t=t.replace(`.`,``)),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=c(n/p),e.d=[],r=(n+1)%p,n<0&&(r+=p),rh||e.e<-h))throw Error(s+n)}else e.s=0,e.e=0,e.d=[0];return e}function D(e,t,n){var r,a,o,u,d,m,g,_,v=e.d;for(u=1,o=v[0];o>=10;o/=10)u++;if(r=t-u,r<0)r+=p,a=t,g=v[_=0];else{if(_=Math.ceil((r+1)/p),o=v.length,_>=o)return e;for(g=o=v[_],u=1;o>=10;o/=10)u++;r%=p,a=r-p+u}if(n!==void 0&&(o=l(10,u-a-1),d=g/o%10|0,m=t<0||v[_+1]!==void 0||g%o,m=n<4?(d||m)&&(n==0||n==(e.s<0?3:2)):d>5||d==5&&(n==4||m||n==6&&(r>0?a>0?g/l(10,u-a):0:v[_-1])%10&1||n==(e.s<0?8:7))),t<1||!v[0])return m?(o=S(e),v.length=1,t=t-o-1,v[0]=l(10,(p-t%p)%p),e.e=c(-t/p)||0):(v.length=1,v[0]=e.e=e.s=0),e;if(r==0?(v.length=_,o=1,_--):(v.length=_+1,o=l(10,p-r),v[_]=a>0?(g/l(10,u-a)%l(10,a)|0)*o:0),m)for(;;)if(_==0){(v[0]+=o)==f&&(v[0]=1,++e.e);break}else{if(v[_]+=o,v[_]!=f)break;v[_--]=0,o=1}for(r=v.length;v[--r]===0;)v.pop();if(i&&(e.e>h||e.e<-h))throw Error(s+S(e));return e}function O(e,t){var n,r,a,o,s,c,l,u,d,m,h=e.constructor,g=h.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new h(e),i?D(t,g):t;if(l=e.d,m=t.d,r=t.e,u=e.e,l=l.slice(),s=u-r,s){for(d=s<0,d?(n=l,s=-s,c=m.length):(n=m,r=u,c=l.length),a=Math.max(Math.ceil(g/p),c)+2,s>a&&(s=a,n.length=1),n.reverse(),a=s;a--;)n.push(0);n.reverse()}else{for(a=l.length,c=m.length,d=a0;--a)l[c++]=0;for(a=m.length;a>s;){if(l[--a]0?a=a.charAt(0)+`.`+a.slice(1)+w(r):o>1&&(a=a.charAt(0)+`.`+a.slice(1)),a=a+(i<0?`e`:`e+`)+i):i<0?(a=`0.`+w(-i-1)+a,n&&(r=n-o)>0&&(a+=w(r))):i>=o?(a+=w(i+1-o),n&&(r=n-i-1)>0&&(a=a+`.`+w(r))):((r=i+1)0&&(i+1===o&&(a+=`.`),a+=w(r))),e.s<0?`-`+a:a}function A(e,t){if(e.length>t)return e.length=t,!0}function j(e){var t,n,r;function i(e){var t=this;if(!(t instanceof i))return new i(e);if(t.constructor=i,e instanceof i){t.s=e.s,t.e=e.e,t.d=(e=e.d)?e.slice():e;return}if(typeof e==`number`){if(e*0!=0)throw Error(o+e);if(e>0)t.s=1;else if(e<0)e=-e,t.s=-1;else{t.s=0,t.e=0,t.d=[0];return}if(e===~~e&&e<1e7){t.e=0,t.d=[e];return}return E(t,e.toString())}else if(typeof e!=`string`)throw Error(o+e);if(e.charCodeAt(0)===45?(e=e.slice(1),t.s=-1):t.s=1,u.test(e))E(t,e);else throw Error(o+e)}if(i.prototype=g,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=j,i.config=i.set=M,e===void 0&&(e={}),e)for(r=[`precision`,`rounding`,`toExpNeg`,`toExpPos`,`LN10`],t=0;t=s[t+1]&&i<=s[t+2])this[r]=i;else throw Error(o+r+`: `+i);if((i=e[r=`LN10`])!==void 0)if(i==Math.LN10)this[r]=new this(i);else throw Error(o+r+`: `+i);return this}r=j(r),r.default=r.Decimal=r,d=new r(1),typeof define==`function`&&define.amd?define(function(){return r}):t!==void 0&&t.exports?t.exports=r:(e||=typeof self<`u`&&self&&self.self==self?self:Function(`return this`)(),e.Decimal=r)})(e)}))());function Cg(e){return e===0?1:Math.floor(new q.default(e).abs().log(10).toNumber())+1}function wg(e,t,n){for(var r=new q.default(e),i=0,a=[];r.lt(t)&&i<1e5;)a.push(r.toNumber()),r=r.add(n),i++;return a}function Tg(e,t){return Ag(e)||kg(e,t)||Dg(e,t)||Eg()}function Eg(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Dg(e,t){if(e){if(typeof e==`string`)return Og(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Og(e,t):void 0}}function Og(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{var t=Tg(e,2),n=t[0],r=t[1],i=n,a=r;return n>r&&(i=r,a=n),[i,a]},Mg=(e,t,n)=>{if(e.lte(0))return new q.default(0);var r=Cg(e.toNumber()),i=new q.default(10).pow(r),a=e.div(i),o=r===1?.1:.05,s=new q.default(Math.ceil(a.div(o).toNumber())).add(n).mul(o).mul(i);return t?new q.default(s.toNumber()):new q.default(Math.ceil(s.toNumber()))},Ng=(e,t,n)=>{if(e.lte(0))return new q.default(0);var r=[1,2,2.5,5],i=e.toNumber(),a=Math.floor(new q.default(i).abs().log(10).toNumber()),o=new q.default(10).pow(a),s=e.div(o).toNumber(),c=r.findIndex(e=>e>=s-1e-10);if(c===-1&&(o=o.mul(10),c=0),c+=n,c>=r.length){var l=Math.floor(c/r.length);c%=r.length,o=o.mul(new q.default(10).pow(l))}var u=new q.default(r[c]??1).mul(o);return t?u:new q.default(Math.ceil(u.toNumber()))},Pg=(e,t,n)=>{var r=new q.default(1),i=new q.default(e);if(!i.isint()&&n){var a=Math.abs(e);a<1?(r=new q.default(10).pow(Cg(e)-1),i=new q.default(Math.floor(i.div(r).toNumber())).mul(r)):a>1&&(i=new q.default(Math.floor(e)))}else e===0?i=new q.default(Math.floor((t-1)/2)):n||(i=new q.default(Math.floor(e)));for(var o=Math.floor((t-1)/2),s=[],c=0;c4&&arguments[4]!==void 0?arguments[4]:0,a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:Mg;if(!Number.isFinite((t-e)/(n-1)))return{step:new q.default(0),tickMin:new q.default(0),tickMax:new q.default(0)};var o=a(new q.default(t).sub(e).div(n-1),r,i),s;e<=0&&t>=0?s=new q.default(0):(s=new q.default(e).add(t).div(2),s=s.sub(new q.default(s).mod(o)));var c=Math.ceil(s.sub(e).div(o).toNumber()),l=Math.ceil(new q.default(t).sub(s).div(o).toNumber()),u=c+l+1;return u>n?Fg(e,t,n,r,i+1,a):(u0?l+(n-u):l,c=t>0?c:c+(n-u)),{step:o,tickMin:s.sub(new q.default(c).mul(o)),tickMax:s.add(new q.default(l).mul(o))})},Ig=function(e){var t=Tg(e,2),n=t[0],r=t[1],i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`auto`,s=Math.max(i,2),c=Tg(jg([n,r]),2),l=c[0],u=c[1];if(l===-1/0||u===1/0){var d=u===1/0?[l,...Array(i-1).fill(1/0)]:[...Array(i-1).fill(-1/0),u];return n>r?d.reverse():d}if(l===u)return Pg(l,i,a);var f=Fg(l,u,s,a,0,o===`snap125`?Ng:Mg),p=f.step,m=f.tickMin,h=f.tickMax,g=wg(m,h.add(new q.default(.1).mul(p)),p);return n>r?g.reverse():g},Lg=function(e,t){var n=Tg(e,2),r=n[0],i=n[1],a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:`auto`,s=Tg(jg([r,i]),2),c=s[0],l=s[1];if(c===-1/0||l===1/0)return[r,i];if(c===l)return[c];var u=o===`snap125`?Ng:Mg,d=Math.max(t,2),f=u(new q.default(l).sub(c).div(d-1),a,0),p=[...wg(new q.default(c),new q.default(l),f),l];if(a===!1){p=p.map(e=>Math.round(e));var m=p.length-1;m>0&&p[m]===p[m-1]&&(p=p.slice(0,m))}return r>i?p.reverse():p},Rg=e=>e.rootProps.maxBarSize,zg=e=>e.rootProps.barGap,Bg=e=>e.rootProps.barCategoryGap,Vg=e=>e.rootProps.barSize,Hg=e=>e.rootProps.stackOffset,Ug=e=>e.rootProps.reverseStackOrder,Wg=e=>e.options.chartName,Gg=e=>e.rootProps.syncId,Kg=e=>e.rootProps.syncMethod,qg=e=>e.options.eventEmitter,Jg=e=>e.rootProps.baseValue,J={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},Yg={allowDecimals:!1,allowDuplicatedCategory:!0,allowDataOverflow:!1,angle:0,angleAxisId:0,axisLine:!0,axisLineType:`polygon`,cx:0,cy:0,hide:!1,includeHidden:!1,label:!1,niceTicks:`auto`,orientation:`outer`,reversed:!1,scale:`auto`,tick:!0,tickLine:!0,tickSize:8,type:`auto`,zIndex:J.axis},Xg={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!0,angle:0,axisLine:!0,includeHidden:!1,hide:!1,niceTicks:`auto`,label:!1,orientation:`right`,radiusAxisId:0,reversed:!1,scale:`auto`,stroke:`#ccc`,tick:!0,tickCount:5,tickLine:!0,type:`auto`,zIndex:J.axis},Zg=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function Qg(e,t,n){if(n!==`auto`)return n;if(e!=null)return Uu(e,t)?`category`:`number`}function $g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function e_(e){for(var t=1;t{if(t!=null)return e.polarAxis.angleAxis[t]},xf],(e,t)=>{if(e!=null)return e;var n=Qg(t,`angleAxis`,i_.type)??`category`;return e_(e_({},i_),{},{type:n})}),s_=V([(e,t)=>e.polarAxis.radiusAxis[t],xf],(e,t)=>{if(e!=null)return e;var n=Qg(t,`radiusAxis`,a_.type)??`category`;return e_(e_({},a_),{},{type:n})}),c_=e=>e.polarOptions,l_=V([ld,ud,Dd],Ph),u_=V([c_,l_],(e,t)=>{if(e!=null)return ci(e.innerRadius,t,0)}),d_=V([c_,l_],(e,t)=>{if(e!=null)return ci(e.outerRadius,t,t*.8)}),f_=V([c_],e=>e==null?[0,0]:[e.startAngle,e.endAngle]);V([o_,f_],Zg);var p_=V([l_,u_,d_],(e,t,n)=>{if(!(e==null||t==null||n==null))return[t,n]});V([s_,p_],Zg);var m_=V([K,c_,u_,d_,ld,ud],(e,t,n,r,i,a)=>{if(!(e!==`centric`&&e!==`radial`||t==null||n==null||r==null)){var o=t.cx,s=t.cy,c=t.startAngle,l=t.endAngle;return{cx:ci(o,i,i/2),cy:ci(s,a,a/2),innerRadius:n,outerRadius:r,startAngle:c,endAngle:l,clockWise:!1}}}),Y=(e,t)=>t,h_=(e,t,n)=>n;function g_(e){return e?.id}function __(e,t,n){var r=t.chartData,i=r===void 0?[]:r,a=n.allowDuplicatedCategory,o=n.dataKey,s=new Map;return e.forEach(e=>{var t=e.data??i;if(!(t==null||t.length===0)){var n=g_(e);t.forEach((t,r)=>{var i=o==null||a?r:String(G(t,o,null)),c=G(t,e.dataKey,0),l=s.has(i)?s.get(i):{};Object.assign(l,{[n]:c}),s.set(i,l)})}}),Array.from(s.values())}function v_(e){return`stackId`in e&&e.stackId!=null&&e.dataKey!=null}var y_=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function b_(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function x_(e,t){if(e.length===t.length){for(var n=0;n{var t=K(e);return t===`horizontal`?`xAxis`:t===`vertical`?`yAxis`:t===`centric`?`angleAxis`:`radiusAxis`},C_=e=>e.tooltip.settings.axisId;function w_(e){if(e!=null){var t=e.ticks,n=e.bandwidth,r=e.range(),i=[Math.min(...r),Math.max(...r)];return{domain:()=>e.domain(),range:function(e){function t(){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(()=>i),rangeMin:()=>i[0],rangeMax:()=>i[1],isInRange(e){var t=i[0],n=i[1];return t<=n?e>=t&&e<=n:e>=n&&e<=t},bandwidth:n?()=>n.call(e):void 0,ticks:t?n=>t.call(e,n):void 0,map:(t,n)=>{var r=e(t);if(r!=null){if(e.bandwidth&&n!=null&&n.position){var i=e.bandwidth();switch(n.position){case`middle`:r+=i/2;break;case`end`:r+=i;break;default:break}}return r}}}}}var T_=(e,t)=>{if(t!=null)switch(e){case`linear`:if(!yg(t)){for(var n,r,i=0;ir)&&(r=a))}return n!==void 0&&r!==void 0?[n,r]:void 0}return t;default:return t}};function E_(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function D_(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function O_(e){let t,n,r;e.length===2?(t=e===E_||e===D_?e:k_,n=e,r=e):(t=E_,n=(t,n)=>E_(e(t),n),r=(t,n)=>e(t)-n);function i(e,r,i=0,a=e.length){if(i>>1;n(e[t],r)<0?i=t+1:a=t}while(i>>1;n(e[t],r)<=0?i=t+1:a=t}while(in&&r(e[o-1],t)>-r(e[o],t)?o-1:o}return{left:i,center:o,right:a}}function k_(){return 0}function A_(e){return e===null?NaN:+e}function*j_(e,t){if(t===void 0)for(let t of e)t!=null&&(t=+t)>=t&&(yield t);else{let n=-1;for(let r of e)(r=t(r,++n,e))!=null&&(r=+r)>=r&&(yield r)}}var M_=O_(E_),N_=M_.right;M_.left,O_(A_).center;var P_=class extends Map{constructor(e,t=R_){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:t}}),e!=null)for(let[t,n]of e)this.set(t,n)}get(e){return super.get(F_(this,e))}has(e){return super.has(F_(this,e))}set(e,t){return super.set(I_(this,e),t)}delete(e){return super.delete(L_(this,e))}};function F_({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):n}function I_({_intern:e,_key:t},n){let r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function L_({_intern:e,_key:t},n){let r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function R_(e){return typeof e==`object`&&e?e.valueOf():e}function z_(e=E_){if(e===E_)return B_;if(typeof e!=`function`)throw TypeError(`compare is not a function`);return(t,n)=>{let r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function B_(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et))}var V_=Math.sqrt(50),H_=Math.sqrt(10),U_=Math.sqrt(2);function W_(e,t,n){let r=(t-e)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/10**i,o=a>=V_?10:a>=H_?5:a>=U_?2:1,s,c,l;return i<0?(l=10**-i/o,s=Math.round(e*l),c=Math.round(t*l),s/lt&&--c,l=-l):(l=10**i*o,s=Math.round(e/l),c=Math.round(t/l),s*lt&&--c),c0))return[];if(e===t)return[e];let r=t=i))return[];let s=a-i+1,c=Array(s);if(r)if(o<0)for(let e=0;e=t)&&(n=t);else{let r=-1;for(let i of e)(i=t(i,++r,e))!=null&&(n=i)&&(n=i)}return n}function Y_(e,t){let n;if(t===void 0)for(let t of e)t!=null&&(n>t||n===void 0&&t>=t)&&(n=t);else{let r=-1;for(let i of e)(i=t(i,++r,e))!=null&&(n>i||n===void 0&&i>=i)&&(n=i)}return n}function X_(e,t,n=0,r=1/0,i){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(i=i===void 0?B_:z_(i);r>n;){if(r-n>600){let a=r-n+1,o=t-n+1,s=Math.log(a),c=.5*Math.exp(2*s/3),l=.5*Math.sqrt(s*c*(a-c)/a)*(o-a/2<0?-1:1),u=Math.max(n,Math.floor(t-o*c/a+l)),d=Math.min(r,Math.floor(t+(a-o)*c/a+l));X_(e,t,u,d,i)}let a=e[t],o=n,s=r;for(Z_(e,n,t),i(e[r],a)>0&&Z_(e,n,r);o0;)--s}i(e[n],a)===0?Z_(e,n,s):(++s,Z_(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Z_(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function Q_(e,t,n){if(e=Float64Array.from(j_(e,n)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return Y_(e);if(t>=1)return J_(e);var r,i=(r-1)*t,a=Math.floor(i),o=J_(X_(e,a).subarray(0,a+1));return o+(Y_(e.subarray(a+1))-o)*(i-a)}}function $_(e,t,n=A_){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,i=(r-1)*t,a=Math.floor(i),o=+n(e[a],a,e);return o+(+n(e[a+1],a+1,e)-o)*(i-a)}}function ev(e,t,n){e=+e,t=+t,n=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((t-e)/n))|0,a=Array(i);++r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Av(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Av(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=_v.exec(e))?new Nv(t[1],t[2],t[3],1):(t=vv.exec(e))?new Nv(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=yv.exec(e))?Av(t[1],t[2],t[3],t[4]):(t=bv.exec(e))?Av(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=xv.exec(e))?Bv(t[1],t[2]/100,t[3]/100,1):(t=Sv.exec(e))?Bv(t[1],t[2]/100,t[3]/100,t[4]):Cv.hasOwnProperty(e)?kv(Cv[e]):e===`transparent`?new Nv(NaN,NaN,NaN,0):null}function kv(e){return new Nv(e>>16&255,e>>8&255,e&255,1)}function Av(e,t,n,r){return r<=0&&(e=t=n=NaN),new Nv(e,t,n,r)}function jv(e){return e instanceof uv||(e=Ov(e)),e?(e=e.rgb(),new Nv(e.r,e.g,e.b,e.opacity)):new Nv}function Mv(e,t,n,r){return arguments.length===1?jv(e):new Nv(e,t,n,r??1)}function Nv(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}cv(Nv,Mv,lv(uv,{brighter(e){return e=e==null?fv:fv**+e,new Nv(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?dv:dv**+e,new Nv(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Nv(Rv(this.r),Rv(this.g),Rv(this.b),Lv(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Pv,formatHex:Pv,formatHex8:Fv,formatRgb:Iv,toString:Iv}));function Pv(){return`#${zv(this.r)}${zv(this.g)}${zv(this.b)}`}function Fv(){return`#${zv(this.r)}${zv(this.g)}${zv(this.b)}${zv((isNaN(this.opacity)?1:this.opacity)*255)}`}function Iv(){let e=Lv(this.opacity);return`${e===1?`rgb(`:`rgba(`}${Rv(this.r)}, ${Rv(this.g)}, ${Rv(this.b)}${e===1?`)`:`, ${e})`}`}function Lv(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Rv(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function zv(e){return e=Rv(e),(e<16?`0`:``)+e.toString(16)}function Bv(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Uv(e,t,n,r)}function Vv(e){if(e instanceof Uv)return new Uv(e.h,e.s,e.l,e.opacity);if(e instanceof uv||(e=Ov(e)),!e)return new Uv;if(e instanceof Uv)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n0&&c<1?0:o,new Uv(o,s,c,e.opacity)}function Hv(e,t,n,r){return arguments.length===1?Vv(e):new Uv(e,t,n,r??1)}function Uv(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}cv(Uv,Hv,lv(uv,{brighter(e){return e=e==null?fv:fv**+e,new Uv(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?dv:dv**+e,new Uv(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new Nv(Kv(e>=240?e-240:e+120,i,r),Kv(e,i,r),Kv(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Uv(Wv(this.h),Gv(this.s),Gv(this.l),Lv(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Lv(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Wv(this.h)}, ${Gv(this.s)*100}%, ${Gv(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Wv(e){return e=(e||0)%360,e<0?e+360:e}function Gv(e){return Math.max(0,Math.min(1,e||0))}function Kv(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var qv=e=>()=>e;function Jv(e,t){return function(n){return e+n*t}}function Yv(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function Xv(e){return(e=+e)==1?Zv:function(t,n){return n-t?Yv(t,n,e):qv(isNaN(t)?n:t)}}function Zv(e,t){var n=t-e;return n?Jv(e,n):qv(isNaN(e)?t:e)}var Qv=(function e(t){var n=Xv(t);function r(e,t){var r=n((e=Mv(e)).r,(t=Mv(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=Zv(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function $v(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;in&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:ry(r,i)})),n=oy.lastIndex;return nt&&(n=e,e=t,t=n),function(n){return Math.max(e,Math.min(t,n))}}function yy(e,t,n){var r=e[0],i=e[1],a=t[0],o=t[1];return i2?by:yy,c=l=null,d}function d(i){return i==null||isNaN(i=+i)?a:(c||=s(e.map(r),t,n))(r(o(i)))}return d.invert=function(n){return o(i((l||=s(t,e.map(r),ry))(n)))},d.domain=function(t){return arguments.length?(e=Array.from(t,my),u()):e.slice()},d.range=function(e){return arguments.length?(t=Array.from(e),u()):t.slice()},d.rangeRound=function(e){return t=Array.from(e),n=dy,u()},d.clamp=function(e){return arguments.length?(o=e?!0:gy,u()):o!==gy},d.interpolate=function(e){return arguments.length?(n=e,u()):n},d.unknown=function(e){return arguments.length?(a=e,d):a},function(e,t){return r=e,i=t,u()}}function Cy(){return Sy()(gy,gy)}function wy(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString(`en`).replace(/,/g,``):e.toString(10)}function Ty(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf(`e`),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function Ey(e){return e=Ty(Math.abs(e)),e?e[1]:NaN}function Dy(e,t){return function(n,r){for(var i=n.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(n.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(t)}}function Oy(e){return function(t){return t.replace(/[0-9]/g,function(t){return e[+t]})}}var ky=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ay(e){if(!(t=ky.exec(e)))throw Error(`invalid format: `+e);var t;return new jy({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Ay.prototype=jy.prototype;function jy(e){this.fill=e.fill===void 0?` `:e.fill+``,this.align=e.align===void 0?`>`:e.align+``,this.sign=e.sign===void 0?`-`:e.sign+``,this.symbol=e.symbol===void 0?``:e.symbol+``,this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?``:e.type+``}jy.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?`0`:``)+(this.width===void 0?``:Math.max(1,this.width|0))+(this.comma?`,`:``)+(this.precision===void 0?``:`.`+Math.max(0,this.precision|0))+(this.trim?`~`:``)+this.type};function My(e){out:for(var t=e.length,n=1,r=-1,i;n0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(i+1):e}var Ny;function Py(e,t){var n=Ty(e,t);if(!n)return Ny=void 0,e.toPrecision(t);var r=n[0],i=n[1],a=i-(Ny=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return a===o?r:a>o?r+Array(a-o+1).join(`0`):a>0?r.slice(0,a)+`.`+r.slice(a):`0.`+Array(1-a).join(`0`)+Ty(e,Math.max(0,t+a-1))[0]}function Fy(e,t){var n=Ty(e,t);if(!n)return e+``;var r=n[0],i=n[1];return i<0?`0.`+Array(-i).join(`0`)+r:r.length>i+1?r.slice(0,i+1)+`.`+r.slice(i+1):r+Array(i-r.length+2).join(`0`)}var Iy={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+``,d:wy,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Fy(e*100,t),r:Fy,s:Py,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Ly(e){return e}var Ry=Array.prototype.map,zy=[`y`,`z`,`a`,`f`,`p`,`n`,`µ`,`m`,``,`k`,`M`,`G`,`T`,`P`,`E`,`Z`,`Y`];function By(e){var t=e.grouping===void 0||e.thousands===void 0?Ly:Dy(Ry.call(e.grouping,Number),e.thousands+``),n=e.currency===void 0?``:e.currency[0]+``,r=e.currency===void 0?``:e.currency[1]+``,i=e.decimal===void 0?`.`:e.decimal+``,a=e.numerals===void 0?Ly:Oy(Ry.call(e.numerals,String)),o=e.percent===void 0?`%`:e.percent+``,s=e.minus===void 0?`−`:e.minus+``,c=e.nan===void 0?`NaN`:e.nan+``;function l(e,l){e=Ay(e);var u=e.fill,d=e.align,f=e.sign,p=e.symbol,m=e.zero,h=e.width,g=e.comma,_=e.precision,v=e.trim,y=e.type;y===`n`?(g=!0,y=`g`):Iy[y]||(_===void 0&&(_=12),v=!0,y=`g`),(m||u===`0`&&d===`=`)&&(m=!0,u=`0`,d=`=`);var b=(l&&l.prefix!==void 0?l.prefix:``)+(p===`$`?n:p===`#`&&/[boxX]/.test(y)?`0`+y.toLowerCase():``),x=(p===`$`?r:/[%p]/.test(y)?o:``)+(l&&l.suffix!==void 0?l.suffix:``),S=Iy[y],C=/[defgprs%]/.test(y);_=_===void 0?6:/[gprs]/.test(y)?Math.max(1,Math.min(21,_)):Math.max(0,Math.min(20,_));function w(e){var n=b,r=x,o,l,p;if(y===`c`)r=S(e)+r,e=``;else{e=+e;var w=e<0||1/e<0;if(e=isNaN(e)?c:S(Math.abs(e),_),v&&(e=My(e)),w&&+e==0&&f!==`+`&&(w=!1),n=(w?f===`(`?f:s:f===`-`||f===`(`?``:f)+n,r=(y===`s`&&!isNaN(e)&&Ny!==void 0?zy[8+Ny/3]:``)+r+(w&&f===`(`?`)`:``),C){for(o=-1,l=e.length;++op||p>57){r=(p===46?i+e.slice(o+1):e.slice(o))+r,e=e.slice(0,o);break}}}g&&!m&&(e=t(e,1/0));var T=n.length+e.length+r.length,E=T>1)+n+e+r+E.slice(T);break;default:e=E+n+e+r;break}return a(e)}return w.toString=function(){return e+``},w}function u(e,t){var n=Math.max(-8,Math.min(8,Math.floor(Ey(t)/3)))*3,r=10**-n,i=l((e=Ay(e),e.type=`f`,e),{suffix:zy[8+n/3]});return function(e){return i(r*e)}}return{format:l,formatPrefix:u}}var Vy,Hy,Uy;Wy({thousands:`,`,grouping:[3],currency:[`$`,``]});function Wy(e){return Vy=By(e),Hy=Vy.format,Uy=Vy.formatPrefix,Vy}function Gy(e){return Math.max(0,-Ey(Math.abs(e)))}function Ky(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Ey(t)/3)))*3-Ey(Math.abs(e)))}function qy(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Ey(t)-Ey(e))+1}function Jy(e,t,n,r){var i=q_(e,t,n),a;switch(r=Ay(r??`,f`),r.type){case`s`:var o=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(a=Ky(i,o))&&(r.precision=a),Uy(r,o);case``:case`e`:case`g`:case`p`:case`r`:r.precision==null&&!isNaN(a=qy(i,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=a-(r.type===`e`));break;case`f`:case`%`:r.precision==null&&!isNaN(a=Gy(i))&&(r.precision=a-(r.type===`%`)*2);break}return Hy(r)}function Yy(e){var t=e.domain;return e.ticks=function(e){var n=t();return G_(n[0],n[n.length-1],e??10)},e.tickFormat=function(e,n){var r=t();return Jy(r[0],r[r.length-1],e??10,n)},e.nice=function(n){n??=10;var r=t(),i=0,a=r.length-1,o=r[i],s=r[a],c,l,u=10;for(s0;){if(l=K_(o,s,n),l===c)return r[i]=o,r[a]=s,t(r);if(l>0)o=Math.floor(o/l)*l,s=Math.ceil(s/l)*l;else if(l<0)o=Math.ceil(o*l)/l,s=Math.floor(s*l)/l;else break;c=l}return e},e}function Xy(){var e=Cy();return e.copy=function(){return xy(e,Xy())},tv.apply(e,arguments),Yy(e)}function Zy(e){var t;function n(e){return e==null||isNaN(e=+e)?t:e}return n.invert=n,n.domain=n.range=function(t){return arguments.length?(e=Array.from(t,my),n):e.slice()},n.unknown=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Zy(e).unknown(t)},e=arguments.length?Array.from(e,my):[0,1],Yy(n)}function Qy(e,t){e=e.slice();var n=0,r=e.length-1,i=e[n],a=e[r],o;return ae**+t}function ab(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function ob(e){return(t,n)=>-e(-t,n)}function sb(e){let t=e($y,eb),n=t.domain,r=10,i,a;function o(){return i=ab(r),a=ib(r),n()[0]<0?(i=ob(i),a=ob(a),e(tb,nb)):e($y,eb),t}return t.base=function(e){return arguments.length?(r=+e,o()):r},t.domain=function(e){return arguments.length?(n(e),o()):n()},t.ticks=e=>{let t=n(),o=t[0],s=t[t.length-1],c=s0){for(;l<=u;++l)for(d=1;ds)break;m.push(f)}}else for(;l<=u;++l)for(d=r-1;d>=1;--d)if(f=l>0?d/a(-l):d*a(l),!(fs)break;m.push(f)}m.length*2{if(e??=10,n??=r===10?`s`:`,`,typeof n!=`function`&&(!(r%1)&&(n=Ay(n)).precision==null&&(n.trim=!0),n=Hy(n)),e===1/0)return n;let o=Math.max(1,r*e/t.ticks().length);return e=>{let t=e/a(Math.round(i(e)));return t*rn(Qy(n(),{floor:e=>a(Math.floor(i(e))),ceil:e=>a(Math.ceil(i(e)))})),t}function cb(){let e=sb(Sy()).domain([1,10]);return e.copy=()=>xy(e,cb()).base(e.base()),tv.apply(e,arguments),e}function lb(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function ub(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function db(e){var t=1,n=e(lb(t),ub(t));return n.constant=function(n){return arguments.length?e(lb(t=+n),ub(t)):t},Yy(n)}function fb(){var e=db(Sy());return e.copy=function(){return xy(e,fb()).constant(e.constant())},tv.apply(e,arguments)}function pb(e){return function(t){return t<0?-((-t)**+e):t**+e}}function mb(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function hb(e){return e<0?-e*e:e*e}function gb(e){var t=e(gy,gy),n=1;function r(){return n===1?e(gy,gy):n===.5?e(mb,hb):e(pb(n),pb(1/n))}return t.exponent=function(e){return arguments.length?(n=+e,r()):n},Yy(t)}function _b(){var e=gb(Sy());return e.copy=function(){return xy(e,_b()).exponent(e.exponent())},tv.apply(e,arguments),e}function vb(){return _b.apply(null,arguments).exponent(.5)}function yb(e){return Math.sign(e)*e*e}function bb(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function xb(){var e=Cy(),t=[0,1],n=!1,r;function i(t){var i=bb(e(t));return isNaN(i)?r:n?Math.round(i):i}return i.invert=function(t){return e.invert(yb(t))},i.domain=function(t){return arguments.length?(e.domain(t),i):e.domain()},i.range=function(n){return arguments.length?(e.range((t=Array.from(n,my)).map(yb)),i):t.slice()},i.rangeRound=function(e){return i.range(e).round(!0)},i.round=function(e){return arguments.length?(n=!!e,i):n},i.clamp=function(t){return arguments.length?(e.clamp(t),i):e.clamp()},i.unknown=function(e){return arguments.length?(r=e,i):r},i.copy=function(){return xb(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},tv.apply(i,arguments),Yy(i)}function Sb(){var e=[],t=[],n=[],r;function i(){var r=0,i=Math.max(1,t.length);for(n=Array(i-1);++r0?n[i-1]:e[0],i=n?[r[n-1],t]:[r[o-1],r[o]]},o.unknown=function(e){return arguments.length&&(a=e),o},o.thresholds=function(){return r.slice()},o.copy=function(){return Cb().domain([e,t]).range(i).unknown(a)},tv.apply(Yy(o),arguments)}function wb(){var e=[.5],t=[0,1],n,r=1;function i(i){return i!=null&&i<=i?t[N_(e,i,0,r)]:n}return i.domain=function(n){return arguments.length?(e=Array.from(n),r=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(n){return arguments.length?(t=Array.from(n),r=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(n){var r=t.indexOf(n);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(n=e,i):n},i.copy=function(){return wb().domain(e).range(t).unknown(n)},tv.apply(i,arguments)}var Tb=new Date,Eb=new Date;function Db(e,t,n,r){function i(t){return e(t=arguments.length===0?new Date:new Date(+t)),t}return i.floor=t=>(e(t=new Date(+t)),t),i.ceil=n=>(e(n=new Date(n-1)),t(n,1),e(n),n),i.round=e=>{let t=i(e),n=i.ceil(e);return e-t(t(e=new Date(+e),n==null?1:Math.floor(n)),e),i.range=(n,r,a)=>{let o=[];if(n=i.ceil(n),a=a==null?1:Math.floor(a),!(n0))return o;let s;do o.push(s=new Date(+n)),t(n,a),e(n);while(sDb(t=>{if(t>=t)for(;e(t),!n(t);)t.setTime(t-1)},(e,r)=>{if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}),n&&(i.count=(t,r)=>(Tb.setTime(+t),Eb.setTime(+r),e(Tb),e(Eb),Math.floor(n(Tb,Eb))),i.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?i.filter(r?t=>r(t)%e===0:t=>i.count(0,t)%e===0):i)),i}var Ob=Db(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Ob.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Db(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Ob),Ob.range;var kb=1e3,Ab=kb*60,jb=Ab*60,Mb=jb*24,Nb=Mb*7,Pb=Mb*30,Fb=Mb*365,Ib=Db(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*kb)},(e,t)=>(t-e)/kb,e=>e.getUTCSeconds());Ib.range;var Lb=Db(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kb)},(e,t)=>{e.setTime(+e+t*Ab)},(e,t)=>(t-e)/Ab,e=>e.getMinutes());Lb.range;var Rb=Db(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Ab)},(e,t)=>(t-e)/Ab,e=>e.getUTCMinutes());Rb.range;var zb=Db(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kb-e.getMinutes()*Ab)},(e,t)=>{e.setTime(+e+t*jb)},(e,t)=>(t-e)/jb,e=>e.getHours());zb.range;var Bb=Db(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*jb)},(e,t)=>(t-e)/jb,e=>e.getUTCHours());Bb.range;var Vb=Db(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ab)/Mb,e=>e.getDate()-1);Vb.range;var Hb=Db(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Mb,e=>e.getUTCDate()-1);Hb.range;var Ub=Db(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Mb,e=>Math.floor(e/Mb));Ub.range;function Wb(e){return Db(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(e,t)=>{e.setDate(e.getDate()+t*7)},(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ab)/Nb)}var Gb=Wb(0),Kb=Wb(1),qb=Wb(2),Jb=Wb(3),Yb=Wb(4),Xb=Wb(5),Zb=Wb(6);Gb.range,Kb.range,qb.range,Jb.range,Yb.range,Xb.range,Zb.range;function Qb(e){return Db(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t*7)},(e,t)=>(t-e)/Nb)}var $b=Qb(0),ex=Qb(1),tx=Qb(2),nx=Qb(3),rx=Qb(4),ix=Qb(5),ax=Qb(6);$b.range,ex.range,tx.range,nx.range,rx.range,ix.range,ax.range;var ox=Db(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());ox.range;var sx=Db(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());sx.range;var cx=Db(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());cx.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Db(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)}),cx.range;var lx=Db(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());lx.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Db(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)}),lx.range;function ux(e,t,n,r,i,a){let o=[[Ib,1,kb],[Ib,5,5*kb],[Ib,15,15*kb],[Ib,30,30*kb],[a,1,Ab],[a,5,5*Ab],[a,15,15*Ab],[a,30,30*Ab],[i,1,jb],[i,3,3*jb],[i,6,6*jb],[i,12,12*jb],[r,1,Mb],[r,2,2*Mb],[n,1,Nb],[t,1,Pb],[t,3,3*Pb],[e,1,Fb]];function s(e,t,n){let r=te).right(o,i);if(a===o.length)return e.every(q_(t/Fb,n/Fb,r));if(a===0)return Ob.every(Math.max(q_(t,n,r),1));let[s,c]=o[i/o[a-1][2]53)return null;`w`in r||(r.w=1),`Z`in r?(a=gx(_x(r.y,0,1)),o=a.getUTCDay(),a=o>4||o===0?ex.ceil(a):ex(a),a=Hb.offset(a,(r.V-1)*7),r.y=a.getUTCFullYear(),r.m=a.getUTCMonth(),r.d=a.getUTCDate()+(r.w+6)%7):(a=hx(_x(r.y,0,1)),o=a.getDay(),a=o>4||o===0?Kb.ceil(a):Kb(a),a=Vb.offset(a,(r.V-1)*7),r.y=a.getFullYear(),r.m=a.getMonth(),r.d=a.getDate()+(r.w+6)%7)}else(`W`in r||`U`in r)&&(`w`in r||(r.w=`u`in r?r.u%7:+(`W`in r)),o=`Z`in r?gx(_x(r.y,0,1)).getUTCDay():hx(_x(r.y,0,1)).getDay(),r.m=0,r.d=`W`in r?(r.w+6)%7+r.W*7-(o+5)%7:r.w+r.U*7-(o+6)%7);return`Z`in r?(r.H+=r.Z/100|0,r.M+=r.Z%100,gx(r)):hx(r)}}function w(e,t,n,r){for(var i=0,a=t.length,o=n.length,s,c;i=o)return-1;if(s=t.charCodeAt(i++),s===37){if(s=t.charAt(i++),c=x[s in yx?t.charAt(i++):s],!c||(r=c(e,n,r))<0)return-1}else if(s!=n.charCodeAt(r++))return-1}return r}function T(e,t,n){var r=l.exec(t.slice(n));return r?(e.p=u.get(r[0].toLowerCase()),n+r[0].length):-1}function E(e,t,n){var r=p.exec(t.slice(n));return r?(e.w=m.get(r[0].toLowerCase()),n+r[0].length):-1}function D(e,t,n){var r=d.exec(t.slice(n));return r?(e.w=f.get(r[0].toLowerCase()),n+r[0].length):-1}function O(e,t,n){var r=_.exec(t.slice(n));return r?(e.m=v.get(r[0].toLowerCase()),n+r[0].length):-1}function k(e,t,n){var r=h.exec(t.slice(n));return r?(e.m=g.get(r[0].toLowerCase()),n+r[0].length):-1}function A(e,n,r){return w(e,t,n,r)}function j(e,t,r){return w(e,n,t,r)}function M(e,t,n){return w(e,r,t,n)}function N(e){return o[e.getDay()]}function ee(e){return a[e.getDay()]}function te(e){return c[e.getMonth()]}function ne(e){return s[e.getMonth()]}function re(e){return i[+(e.getHours()>=12)]}function ie(e){return 1+~~(e.getMonth()/3)}function ae(e){return o[e.getUTCDay()]}function oe(e){return a[e.getUTCDay()]}function se(e){return c[e.getUTCMonth()]}function ce(e){return s[e.getUTCMonth()]}function le(e){return i[+(e.getUTCHours()>=12)]}function ue(e){return 1+~~(e.getUTCMonth()/3)}return{format:function(e){var t=S(e+=``,y);return t.toString=function(){return e},t},parse:function(e){var t=C(e+=``,!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=S(e+=``,b);return t.toString=function(){return e},t},utcParse:function(e){var t=C(e+=``,!0);return t.toString=function(){return e},t}}}var yx={"-":``,_:` `,0:`0`},bx=/^\s*\d+/,xx=/^%/,Sx=/[\\^$*+?|[\]().{}]/g;function X(e,t,n){var r=e<0?`-`:``,i=(r?-e:e)+``,a=i.length;return r+(a[e.toLowerCase(),t]))}function Ex(e,t,n){var r=bx.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function Dx(e,t,n){var r=bx.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function Ox(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function kx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function Ax(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function jx(e,t,n){var r=bx.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function Mx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Nx(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||`00`)),n+r[0].length):-1}function Px(e,t,n){var r=bx.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function Fx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function Ix(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function Lx(e,t,n){var r=bx.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function Rx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function zx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function Bx(e,t,n){var r=bx.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function Vx(e,t,n){var r=bx.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function Hx(e,t,n){var r=bx.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ux(e,t,n){var r=xx.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function Wx(e,t,n){var r=bx.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function Gx(e,t,n){var r=bx.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function Kx(e,t){return X(e.getDate(),t,2)}function qx(e,t){return X(e.getHours(),t,2)}function Jx(e,t){return X(e.getHours()%12||12,t,2)}function Yx(e,t){return X(1+Vb.count(cx(e),e),t,3)}function Xx(e,t){return X(e.getMilliseconds(),t,3)}function Zx(e,t){return Xx(e,t)+`000`}function Qx(e,t){return X(e.getMonth()+1,t,2)}function $x(e,t){return X(e.getMinutes(),t,2)}function eS(e,t){return X(e.getSeconds(),t,2)}function tS(e){var t=e.getDay();return t===0?7:t}function nS(e,t){return X(Gb.count(cx(e)-1,e),t,2)}function rS(e){var t=e.getDay();return t>=4||t===0?Yb(e):Yb.ceil(e)}function iS(e,t){return e=rS(e),X(Yb.count(cx(e),e)+(cx(e).getDay()===4),t,2)}function aS(e){return e.getDay()}function oS(e,t){return X(Kb.count(cx(e)-1,e),t,2)}function sS(e,t){return X(e.getFullYear()%100,t,2)}function cS(e,t){return e=rS(e),X(e.getFullYear()%100,t,2)}function lS(e,t){return X(e.getFullYear()%1e4,t,4)}function uS(e,t){var n=e.getDay();return e=n>=4||n===0?Yb(e):Yb.ceil(e),X(e.getFullYear()%1e4,t,4)}function dS(e){var t=e.getTimezoneOffset();return(t>0?`-`:(t*=-1,`+`))+X(t/60|0,`0`,2)+X(t%60,`0`,2)}function fS(e,t){return X(e.getUTCDate(),t,2)}function pS(e,t){return X(e.getUTCHours(),t,2)}function mS(e,t){return X(e.getUTCHours()%12||12,t,2)}function hS(e,t){return X(1+Hb.count(lx(e),e),t,3)}function gS(e,t){return X(e.getUTCMilliseconds(),t,3)}function _S(e,t){return gS(e,t)+`000`}function vS(e,t){return X(e.getUTCMonth()+1,t,2)}function yS(e,t){return X(e.getUTCMinutes(),t,2)}function bS(e,t){return X(e.getUTCSeconds(),t,2)}function xS(e){var t=e.getUTCDay();return t===0?7:t}function SS(e,t){return X($b.count(lx(e)-1,e),t,2)}function CS(e){var t=e.getUTCDay();return t>=4||t===0?rx(e):rx.ceil(e)}function wS(e,t){return e=CS(e),X(rx.count(lx(e),e)+(lx(e).getUTCDay()===4),t,2)}function TS(e){return e.getUTCDay()}function ES(e,t){return X(ex.count(lx(e)-1,e),t,2)}function DS(e,t){return X(e.getUTCFullYear()%100,t,2)}function OS(e,t){return e=CS(e),X(e.getUTCFullYear()%100,t,2)}function kS(e,t){return X(e.getUTCFullYear()%1e4,t,4)}function AS(e,t){var n=e.getUTCDay();return e=n>=4||n===0?rx(e):rx.ceil(e),X(e.getUTCFullYear()%1e4,t,4)}function jS(){return`+0000`}function MS(){return`%`}function NS(e){return+e}function PS(e){return Math.floor(e/1e3)}var FS,IS,LS;RS({dateTime:`%x, %X`,date:`%-m/%-d/%Y`,time:`%-I:%M:%S %p`,periods:[`AM`,`PM`],days:[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],shortDays:[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],months:[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],shortMonths:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`]});function RS(e){return FS=vx(e),IS=FS.format,FS.parse,LS=FS.utcFormat,FS.utcParse,FS}function zS(e){return new Date(e)}function BS(e){return e instanceof Date?+e:+new Date(+e)}function VS(e,t,n,r,i,a,o,s,c,l){var u=Cy(),d=u.invert,f=u.domain,p=l(`.%L`),m=l(`:%S`),h=l(`%I:%M`),g=l(`%I %p`),_=l(`%a %d`),v=l(`%b %d`),y=l(`%B`),b=l(`%Y`);function x(e){return(c(e)t(r/(e.length-1)))},n.quantiles=function(t){return Array.from({length:t+1},(n,r)=>Q_(e,r/t))},n.copy=function(){return ZS(t).domain(e)},nv.apply(n,arguments)}function QS(){var e=0,t=.5,n=1,r=1,i,a,o,s,c,l=gy,u,d=!1,f;function p(e){return isNaN(e=+e)?f:(e=.5+((e=+u(e))-a)*(r*eav,scaleDiverging:()=>$S,scaleDivergingLog:()=>eC,scaleDivergingPow:()=>nC,scaleDivergingSqrt:()=>rC,scaleDivergingSymlog:()=>tC,scaleIdentity:()=>Zy,scaleImplicit:()=>rv,scaleLinear:()=>Xy,scaleLog:()=>cb,scaleOrdinal:()=>iv,scalePoint:()=>sv,scalePow:()=>_b,scaleQuantile:()=>Sb,scaleQuantize:()=>Cb,scaleRadial:()=>xb,scaleSequential:()=>KS,scaleSequentialLog:()=>qS,scaleSequentialPow:()=>YS,scaleSequentialQuantile:()=>ZS,scaleSequentialSqrt:()=>XS,scaleSequentialSymlog:()=>JS,scaleSqrt:()=>vb,scaleSymlog:()=>fb,scaleThreshold:()=>wb,scaleTime:()=>HS,scaleUtc:()=>US,tickFormat:()=>Jy});function aC(e){var t=iC;if(e in t&&typeof t[e]==`function`)return t[e]();var n=`scale${di(e)}`;if(n in t&&typeof t[n]==`function`)return t[n]()}function oC(e,t,n){if(typeof e==`function`)return e.copy().domain(t).range(n);if(e!=null){var r=aC(e);if(r!=null)return r.domain(t).range(n),r}}function sC(e,t,n,r){if(!(n==null||r==null))return typeof e.scale==`function`?oC(e.scale,n,r):oC(t,n,r)}function cC(e){return`scale${di(e)}`}function lC(e){return cC(e)in iC}var uC=(e,t,n)=>{if(e!=null){var r=e.scale,i=e.type;if(r===`auto`)return i===`category`&&n&&(n.indexOf(`LineChart`)>=0||n.indexOf(`AreaChart`)>=0||n.indexOf(`ComposedChart`)>=0&&!t)?`point`:i===`category`?`band`:`linear`;if(typeof r==`string`)return lC(r)?r:`point`}};function dC(e,t){for(var n=0,r=e.length,i=e[0]t)?n=a+1:r=a}return n}function fC(e,t){if(e){var n=t??e.domain(),r=n.map(t=>e(t)??0),i=e.range();if(!(n.length===0||i.length<2))return e=>{var t=dC(r,e);if(t<=0)return n[0];if(t>=n.length)return n[n.length-1];var i=r[t-1]??0,a=r[t]??0;return Math.abs(e-i)<=Math.abs(e-a)?n[t-1]:n[t]}}}function pC(e){if(e!=null)return`invert`in e&&typeof e.invert==`function`?e.invert.bind(e):fC(e,void 0)}function mC(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function hC(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);ne.cartesianAxis.xAxis[t],OC=(e,t)=>DC(e,t)??EC,kC={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:TC,hide:!0,id:0,includeHidden:!1,interval:`preserveEnd`,minTickGap:5,mirror:!1,name:void 0,orientation:`left`,padding:{top:0,bottom:0},reversed:!1,scale:`auto`,tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:`number`,unit:void 0,niceTicks:`auto`,width:60},AC=(e,t)=>e.cartesianAxis.yAxis[t],jC=(e,t)=>AC(e,t)??kC,MC={domain:[0,`auto`],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:``,range:[64,64],scale:`auto`,type:`number`,unit:``},NC=(e,t)=>e.cartesianAxis.zAxis[t]??MC,Z=(e,t,n)=>{switch(t){case`xAxis`:return OC(e,n);case`yAxis`:return jC(e,n);case`zAxis`:return NC(e,n);case`angleAxis`:return o_(e,n);case`radiusAxis`:return s_(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},PC=(e,t,n)=>{switch(t){case`xAxis`:return OC(e,n);case`yAxis`:return jC(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},FC=(e,t,n)=>{switch(t){case`xAxis`:return OC(e,n);case`yAxis`:return jC(e,n);case`angleAxis`:return o_(e,n);case`radiusAxis`:return s_(e,n);default:throw Error(`Unexpected axis type: ${t}`)}},IC=e=>e.graphicalItems.cartesianItems.some(e=>e.type===`bar`)||e.graphicalItems.polarItems.some(e=>e.type===`radialBar`);function LC(e,t){return n=>{switch(e){case`xAxis`:return`xAxisId`in n&&n.xAxisId===t;case`yAxis`:return`yAxisId`in n&&n.yAxisId===t;case`zAxis`:return`zAxisId`in n&&n.zAxisId===t;case`angleAxis`:return`angleAxisId`in n&&n.angleAxisId===t;case`radiusAxis`:return`radiusAxisId`in n&&n.radiusAxisId===t;default:return!1}}}var RC=e=>e.graphicalItems.cartesianItems,zC=V([Y,h_],LC),BC=(e,t,n)=>e.filter(n).filter(e=>t?.includeHidden===!0||!e.hide),VC=V([RC,Z,zC],BC,{memoizeOptions:{resultEqualityCheck:b_}}),HC=V([VC],e=>e.filter(e=>e.type===`area`||e.type===`bar`).filter(v_)),UC=e=>e.filter(e=>!(`stackId`in e)||e.stackId===void 0),WC=V([VC],UC),GC=e=>e.map(e=>e.data).filter(Boolean).flat(1),KC=V([VC],e=>e.some(e=>!e.data)),qC=V([VC],GC,{memoizeOptions:{resultEqualityCheck:b_}}),JC=(e,t)=>{var n=t.chartData,r=n===void 0?[]:n,i=t.dataStartIndex,a=t.dataEndIndex;return e.length>0?e:r.slice(i,a+1)},YC=V([qC,cg],JC),XC=(e,t,n)=>t?.dataKey==null?n.length>0?n.map(e=>e.dataKey).flatMap(t=>e.map(e=>({value:G(e,t)}))):e.map(e=>({value:e})):e.map(e=>({value:G(e,t.dataKey)})),ZC=(e,t,n,r,i,a)=>{var o=r.chartData,s=o===void 0?[]:o,c=r.dataStartIndex,l=r.dataEndIndex,u=XC(e,t,n);return i&&t?.dataKey!=null&&a.length>0?[...s.slice(c,l+1).map(e=>({value:G(e,t.dataKey)})).filter(e=>e.value!=null),...u]:u},QC=V([YC,Z,VC,cg,KC,qC],ZC);function $C(e){if(ai(e)||e instanceof Date){var t=Number(e);if(W(t))return t}}function ew(e){if(Array.isArray(e)){var t=[$C(e[0]),$C(e[1])];return yg(t)?t:void 0}var n=$C(e);if(n!=null)return[n,n]}function tw(e){return e.map($C).filter(fi)}function nw(e,t){var n=$C(e),r=$C(t);return n==null&&r==null?0:n==null?-1:r==null?1:n-r}var rw=V([QC],e=>e?.map(e=>e.value).sort(nw));function iw(e,t){switch(e){case`xAxis`:return t.direction===`x`;case`yAxis`:return t.direction===`y`;default:return!1}}function aw(e,t,n){if(!n||!n.length)return[];var r;if(typeof t==`number`&&!ri(t))r=t;else if(Array.isArray(t)){var i=tw(t);i.length>0&&(r=Math.max(...i))}return r==null?[]:tw(n.flatMap(t=>{var n=G(e,t.dataKey),i,a;if(Array.isArray(n)){var o=yC(n,2);i=o[0],a=o[1]}else i=a=n;if(!(!W(i)||!W(a)))return[r-i,r+a]}))}var ow=e=>FC(e,S_(e),C_(e)),sw=V([ow],e=>e?.dataKey),cw=V([HC,cg,ow],__),lw=(e,t,n,r)=>{var i=t.reduce((e,t)=>{if(t.stackId==null)return e;var n=e[t.stackId];return n??=[],n.push(t),e[t.stackId]=n,e},{});return Object.fromEntries(Object.entries(i).map(t=>{var i=yC(t,2),a=i[0],o=i[1],s=r?[...o].reverse():o;return[a,{stackedData:Ju(e,s.map(g_),n),graphicalItems:s}]}))},uw=V([cw,HC,Hg,Ug],lw),dw=(e,t,n,r)=>{var i=t.dataStartIndex,a=t.dataEndIndex;if(r==null&&n!==`zAxis`)return td(e,i,a)},fw=V([Z],e=>e.allowDataOverflow),pw=e=>{if(e==null||!(`domain`in e))return TC;if(e.domain!=null)return e.domain;if(`ticks`in e&&e.ticks!=null){if(e.type===`number`){var t=tw(e.ticks);return[Math.min(...t),Math.max(...t)]}if(e.type===`category`)return e.ticks.map(String)}return e?.domain??TC},mw=V([Z],pw),hw=V([mw,fw],xg),gw=V([uw,og,Y,hw],dw,{memoizeOptions:{resultEqualityCheck:y_}}),_w=e=>e.errorBars,vw=(e,t,n)=>e.flatMap(e=>t[e.id]).filter(Boolean).filter(e=>iw(n,e)),yw=function(){var e=[...arguments].filter(Boolean);if(e.length!==0){var t=e.flat();return[Math.min(...t),Math.max(...t)]}},bw=function(e,t,n,r,i){var a=arguments.length>5&&arguments[5]!==void 0?arguments[5]:[],o,s;if(n.length>0&&n.forEach(e=>{var n=e.data==null?a:[...e.data],c=r[e.id]?.filter(e=>iw(i,e));n.forEach(n=>{var r=G(n,t.dataKey??e.dataKey),i=aw(n,r,c);if(i.length>=2){var a=Math.min(...i),l=Math.max(...i);(o==null||as)&&(s=l)}var u=ew(r);u!=null&&(o=o==null?u[0]:Math.min(o,u[0]),s=s==null?u[1]:Math.max(s,u[1]))})}),t?.dataKey!=null&&n.length===0&&e.forEach(e=>{var n=ew(G(e,t.dataKey));n!=null&&(o=o==null?n[0]:Math.min(o,n[0]),s=s==null?n[1]:Math.max(s,n[1]))}),W(o)&&W(s))return[o,s]},xw=V([YC,Z,WC,_w,Y,ug],bw,{memoizeOptions:{resultEqualityCheck:y_}});function Sw(e){var t=e.value;if(ai(t)||t instanceof Date)return t}var Cw=(e,t,n)=>{var r=e.map(Sw).filter(e=>e!=null);return n&&(t.dataKey==null||t.allowDuplicatedCategory&&li(r))?ag(0,e.length):t.allowDuplicatedCategory?r:Array.from(new Set(r))},ww=e=>e.referenceElements.dots,Tw=(e,t,n)=>e.filter(e=>e.ifOverflow===`extendDomain`).filter(e=>t===`xAxis`?e.xAxisId===n:e.yAxisId===n),Ew=V([ww,Y,h_],Tw),Dw=e=>e.referenceElements.areas,Ow=V([Dw,Y,h_],Tw),kw=e=>e.referenceElements.lines,Aw=V([kw,Y,h_],Tw),jw=(e,t)=>{if(e!=null){var n=tw(e.map(e=>t===`xAxis`?e.x:e.y));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},Mw=V(Ew,Y,jw),Nw=(e,t)=>{if(e!=null){var n=tw(e.flatMap(e=>[t===`xAxis`?e.x1:e.y1,t===`xAxis`?e.x2:e.y2]));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},Pw=V([Ow,Y],Nw);function Fw(e){if(e.x!=null)return tw([e.x]);var t=e.segment?.map(e=>e.x);return t==null||t.length===0?[]:tw(t)}function Iw(e){if(e.y!=null)return tw([e.y]);var t=e.segment?.map(e=>e.y);return t==null||t.length===0?[]:tw(t)}var Lw=(e,t)=>{if(e!=null){var n=e.flatMap(e=>t===`xAxis`?Fw(e):Iw(e));if(n.length!==0)return[Math.min(...n),Math.max(...n)]}},Rw=V(Mw,V([Aw,Y],Lw),Pw,(e,t,n)=>yw(e,n,t)),zw=(e,t,n,r,i,a,o,s,c)=>{if(n!=null)return n;var l=o===`vertical`&&s===`xAxis`||o===`horizontal`&&s===`yAxis`?yw(r,a,i):yw(a,i),u=Sg(t,l,e.allowDataOverflow);return u==null&&e.allowDataOverflow&&l==null&&c!=null?c:u},Bw=V([Z,mw,hw,gw,xw,Rw,K,Y,V([Z],e=>{if(!(e==null||e.type!==`number`||!(`ticks`in e)||e.ticks==null)){var t=tw(e.ticks);if(t.length!==0)return[Math.min(...t),Math.max(...t)]}},{memoizeOptions:{resultEqualityCheck:y_}})],zw,{memoizeOptions:{resultEqualityCheck:y_}}),Vw=[0,1],Hw=(e,t,n,r,i,a,o)=>{if(!((e==null||n==null||n.length===0)&&o===void 0)){var s=e.dataKey,c=e.type,l=Uu(t,a);return l&&s==null?ag(0,n?.length??0):c===`category`?Cw(r,e,l):i===`expand`&&!l?Vw:o}},Uw=V([Z,K,YC,QC,Hg,Y,Bw],Hw),Ww=V([Z,IC,Wg],uC),Gw=(e,t,n)=>{var r=t.niceTicks;if(r!==`none`){var i=pw(t),a=Array.isArray(i)&&(i[0]===`auto`||i[1]===`auto`);if((r===`snap125`||r===`adaptive`)&&t!=null&&t.tickCount&&yg(e)){if(a)return Ig(e,t.tickCount,t.allowDecimals,r);if(t.type===`number`)return Lg(e,t.tickCount,t.allowDecimals,r)}if(r===`auto`&&n===`linear`&&t!=null&&t.tickCount){if(a&&yg(e))return Ig(e,t.tickCount,t.allowDecimals,`adaptive`);if(t.type===`number`&&yg(e))return Lg(e,t.tickCount,t.allowDecimals,`adaptive`)}}},Kw=V([Uw,FC,Ww],Gw),qw=(e,t,n,r)=>{if(r!==`angleAxis`&&e?.type===`number`&&yg(t)&&Array.isArray(n)&&n.length>0){var i=t[0],a=n[0]??0,o=t[1],s=n[n.length-1]??0;return[Math.min(i,a),Math.max(o,s)]}return t},Jw=V([Z,Uw,Kw,Y],qw),Yw=V(V(QC,Z,(e,t)=>{if(!(!t||t.type!==`number`)){var n=1/0,r=Array.from(tw(e.map(e=>e.value))).sort((e,t)=>e-t),i=r[0],a=r[r.length-1];if(i==null||a==null)return 1/0;var o=a-i;if(o===0)return 1/0;for(var s=0;si,(e,t,n,r,i)=>{if(!W(e))return 0;var a=t===`vertical`?r.height:r.width;if(i===`gap`)return e*a/2;if(i===`no-gap`){var o=ci(n,e*a),s=e*a/2;return s-o-(s-o)/a*o}return 0}),Xw=(e,t,n)=>{var r=OC(e,t);return r==null||typeof r.padding!=`string`?0:Yw(e,`xAxis`,t,n,r.padding)},Zw=(e,t,n)=>{var r=jC(e,t);return r==null||typeof r.padding!=`string`?0:Yw(e,`yAxis`,t,n,r.padding)},Qw=V(OC,Xw,(e,t)=>{if(e==null)return{left:0,right:0};var n=e.padding;return typeof n==`string`?{left:t,right:t}:{left:(n.left??0)+t,right:(n.right??0)+t}}),$w=V(jC,Zw,(e,t)=>{if(e==null)return{top:0,bottom:0};var n=e.padding;return typeof n==`string`?{top:t,bottom:t}:{top:(n.top??0)+t,bottom:(n.bottom??0)+t}}),eT=V([Dd,Qw,Nd,Md,(e,t,n)=>n],(e,t,n,r,i)=>{var a=r.padding;return i?[a.left,n.width-a.right]:[e.left+t.left,e.left+e.width-t.right]}),tT=V([Dd,K,$w,Nd,Md,(e,t,n)=>n],(e,t,n,r,i,a)=>{var o=i.padding;return a?[r.height-o.bottom,o.top]:t===`horizontal`?[e.top+e.height-n.bottom,e.top+n.top]:[e.top+n.top,e.top+e.height-n.bottom]}),nT=(e,t,n,r)=>{switch(t){case`xAxis`:return eT(e,n,r);case`yAxis`:return tT(e,n,r);case`zAxis`:return NC(e,n)?.range;case`angleAxis`:return f_(e);case`radiusAxis`:return p_(e,n);default:return}},rT=V([Z,nT],Zg),iT=V([Z,Ww,V([Ww,Jw],T_),rT],sC),aT=(e,t,n,r)=>{if(!(n==null||n.dataKey==null)){var i=n.type,a=n.scale;if(Uu(e,r)&&(i===`number`||a!==`auto`))return t.map(e=>e.value)}},oT=V([K,QC,FC,Y],aT),sT=V([iT],w_);V([iT],pC),V([iT,rw],fC),V([VC,_w,Y],vw);function cT(e,t){return e.idt.id)}var lT=(e,t)=>t,uT=(e,t,n)=>n,dT=V(pd,lT,uT,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(cT)),fT=V(md,lT,uT,(e,t,n)=>e.filter(e=>e.orientation===t).filter(e=>e.mirror===n).sort(cT)),pT=(e,t)=>{var n=typeof t.height==`number`?t.height:30;return{width:e.width,height:n}},mT=(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height}),hT=V(Dd,OC,pT),gT=(e,t,n)=>{switch(t){case`top`:return e.top;case`bottom`:return n-e.bottom;default:return 0}},_T=(e,t,n)=>{switch(t){case`left`:return e.left;case`right`:return n-e.right;default:return 0}},vT=V(ud,Dd,dT,lT,uT,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=pT(t,n);o??=gT(t,r,e);var c=r===`top`&&!i||r===`bottom`&&i;a[n.id]=o-Number(c)*s.height,o+=(c?-1:1)*s.height}),a}),yT=V(ld,Dd,fT,lT,uT,(e,t,n,r,i)=>{var a={},o;return n.forEach(n=>{var s=mT(t,n);o??=_T(t,r,e);var c=r===`left`&&!i||r===`right`&&i;a[n.id]=o-Number(c)*s.width,o+=(c?-1:1)*s.width}),a}),bT=V([Dd,OC,(e,t)=>{var n=OC(e,t);if(n!=null)return vT(e,n.orientation,n.mirror)},(e,t)=>t],(e,t,n,r)=>{if(t!=null){var i=n?.[r];return i==null?{x:e.left,y:0}:{x:e.left,y:i}}}),xT=V([Dd,jC,(e,t)=>{var n=jC(e,t);if(n!=null)return yT(e,n.orientation,n.mirror)},(e,t)=>t],(e,t,n,r)=>{if(t!=null){var i=n?.[r];return i==null?{x:0,y:e.top}:{x:i,y:e.top}}}),ST=V(Dd,jC,(e,t)=>({width:typeof t.width==`number`?t.width:60,height:e.height})),CT=(e,t,n)=>{switch(t){case`xAxis`:return hT(e,n).width;case`yAxis`:return ST(e,n).height;default:return}},wT=(e,t,n,r)=>{if(n!=null){var i=n.allowDuplicatedCategory,a=n.type,o=n.dataKey,s=Uu(e,r),c=t.map(e=>e.value),l=c.filter(e=>e!=null);if(o&&s&&a===`category`&&i&&li(l))return c}},TT=V([K,QC,Z,Y],wT),ET=V([K,PC,Ww,sT,TT,oT,nT,Kw,Y],(e,t,n,r,i,a,o,s,c)=>{if(t!=null){var l=Uu(e,c);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:c,categoricalDomain:a,duplicateDomain:i,isCategorical:l,niceTicks:s,range:o,realScaleType:n,scale:r}}}),DT=V([K,FC,Ww,sT,Kw,nT,TT,oT,Y],(e,t,n,r,i,a,o,s,c)=>{if(!(t==null||r==null)){var l=Uu(e,c),u=t.type,d=t.ticks,f=t.tickCount,p=n===`scaleBand`&&typeof r.bandwidth==`function`?r.bandwidth()/2:2,m=u===`category`&&r.bandwidth?r.bandwidth()/p:0;m=c===`angleAxis`&&a!=null&&a.length>=2?ni(a[0]-a[1])*2*m:m;var h=d||i;return h?h.map((e,t)=>{var n=o?o.indexOf(e):e,i=r.map(n);return W(i)?{index:t,coordinate:i+m,value:e,offset:m}:null}).filter(fi):l&&s?s.map((e,t)=>{var n=r.map(e);return W(n)?{coordinate:n+m,value:e,index:t,offset:m}:null}).filter(fi):r.ticks?r.ticks(f).map((e,t)=>{var n=r.map(e);return W(n)?{coordinate:n+m,value:e,index:t,offset:m}:null}).filter(fi):r.domain().map((e,t)=>{var n=r.map(e);return W(n)?{coordinate:n+m,value:o?o[e]:e,index:t,offset:m}:null}).filter(fi)}}),OT=V([K,FC,sT,nT,TT,oT,Y],(e,t,n,r,i,a,o)=>{if(!(t==null||n==null||r==null||r[0]===r[1])){var s=Uu(e,o),c=t.tickCount,l=0;return l=o===`angleAxis`&&r?.length>=2?ni(r[0]-r[1])*2*l:l,s&&a?a.map((e,t)=>{var r=n.map(e);return W(r)?{coordinate:r+l,value:e,index:t,offset:l}:null}).filter(fi):n.ticks?n.ticks(c).map((e,t)=>{var r=n.map(e);return W(r)?{coordinate:r+l,value:e,index:t,offset:l}:null}).filter(fi):n.domain().map((e,t)=>{var r=n.map(e);return W(r)?{coordinate:r+l,value:i?i[e]:e,index:t,offset:l}:null}).filter(fi)}}),kT=V(Z,sT,(e,t)=>{if(!(e==null||t==null))return hC(hC({},e),{},{scale:t})});V((e,t,n)=>NC(e,n),V([V([Z,Ww,Uw,rT],sC)],w_),(e,t)=>{if(!(e==null||t==null))return hC(hC({},e),{},{scale:t})});var AT=V([K,pd,md],(e,t,n)=>{switch(e){case`horizontal`:return t.some(e=>e.reversed)?`right-to-left`:`left-to-right`;case`vertical`:return n.some(e=>e.reversed)?`bottom-to-top`:`top-to-bottom`;case`centric`:case`radial`:return`left-to-right`;default:return}});V([(e,t,n)=>e.renderedTicks[t]?.[n]],e=>{if(!(!e||e.length===0))return t=>{var n=1/0,r=e[0];for(var i of e){var a=Math.abs(i.coordinate-t);ae.options.defaultTooltipEventType,MT=e=>e.options.validateTooltipEventTypes;function NT(e,t,n){if(e==null)return t;var r=e?`axis`:`item`;return n==null?t:n.includes(r)?r:t}function PT(e,t){return NT(t,jT(e),MT(e))}function FT(e){return B(t=>PT(t,e))}var IT=(e,t)=>{var n,r=Number(t);if(!(ri(r)||t==null))return r>=0?e==null||(n=e[r])==null?void 0:n.value:void 0},LT=e=>e.tooltip.settings,RT={active:!1,index:null,dataKey:void 0,graphicalItemId:void 0,coordinate:void 0},zT=Bl({name:`tooltip`,initialState:{itemInteraction:{click:RT,hover:RT},axisInteraction:{click:RT,hover:RT},keyboardInteraction:RT,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0,sourceViewBox:void 0,graphicalItemId:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:`hover`,axisId:0,active:!1,defaultIndex:void 0}},reducers:{addTooltipEntrySettings:{reducer(e,t){e.tooltipItemPayloads.push(H(t.payload))},prepare:U()},replaceTooltipEntrySettings:{reducer(e,t){var n=t.payload,r=n.prev,i=n.next,a=fl(e).tooltipItemPayloads.indexOf(H(r));a>-1&&(e.tooltipItemPayloads[a]=H(i))},prepare:U()},removeTooltipEntrySettings:{reducer(e,t){var n=fl(e).tooltipItemPayloads.indexOf(H(t.payload));n>-1&&e.tooltipItemPayloads.splice(n,1)},prepare:U()},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate}}}),BT=zT.actions,VT=BT.addTooltipEntrySettings,HT=BT.replaceTooltipEntrySettings,UT=BT.removeTooltipEntrySettings,WT=BT.setTooltipSettingsState,GT=BT.setActiveMouseOverItemIndex,KT=BT.mouseLeaveItem,qT=BT.mouseLeaveChart,JT=BT.setActiveClickItemIndex,YT=BT.setMouseOverAxisIndex,XT=BT.setMouseClickAxisIndex,ZT=BT.setSyncInteraction,QT=BT.setKeyboardInteraction,$T=zT.reducer;function eE(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function tE(e){for(var t=1;t{if(t==null)return RT;var i=aE(e,t,n);if(i==null)return RT;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var a=e.settings.active===!0;if(oE(i)){if(a)return tE(tE({},i),{},{active:!0})}else if(r!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:r,graphicalItemId:void 0};return tE(tE({},RT),{},{coordinate:i.coordinate})};function cE(e){if(typeof e==`number`)return Number.isFinite(e)?e:void 0;if(e instanceof Date){var t=e.valueOf();return Number.isFinite(t)?t:void 0}var n=Number(e);return Number.isFinite(n)?n:void 0}function lE(e,t){var n=cE(e),r=t[0],i=t[1];return n!==void 0&&n>=Math.min(r,i)&&n<=Math.max(r,i)}function uE(e,t,n){if(n==null||t==null)return!0;var r=G(e,t);return r==null||!yg(n)||lE(r,n)}var dE=(e,t,n,r)=>{var i=e?.index;if(i==null)return null;var a=Number(i);if(!W(a))return i;var o=0,s=1/0;t.length>0&&(s=t.length-1);var c=Math.max(o,Math.min(a,s)),l=t[c];return l==null||uE(l,n,r)?String(c):null},fE=(e,t,n,r,i,a,o)=>{if(a!=null){var s=o[0]?.getPosition(a);if(s!=null)return s;var c=i?.[Number(a)];if(c)switch(n){case`horizontal`:return{x:c.coordinate,y:(r.top+t)/2};default:return{x:(r.left+e)/2,y:c.coordinate}}}},pE=(e,t,n,r)=>{if(t===`axis`)return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i=n===`hover`?e.itemInteraction.hover.graphicalItemId:e.itemInteraction.click.graphicalItemId;if(e.syncInteraction.active&&i==null)return e.tooltipItemPayloads;if(i==null&&(r!=null||e.keyboardInteraction.active)){var a=e.tooltipItemPayloads[0];return a==null?[]:[a]}return e.tooltipItemPayloads.filter(e=>e.settings?.graphicalItemId===i)},mE=e=>e.options.tooltipPayloadSearcher,hE=e=>e.tooltip;function gE(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function _E(e){for(var t=1;te(t)}function wE(e){if(typeof e==`string`)return e}function TE(e){if(!(typeof e!=`object`||!e))return{name:`name`in e?xE(e.name):void 0,unit:`unit`in e?SE(e.unit):void 0,dataKey:`dataKey`in e?CE(e.dataKey):void 0,payload:`payload`in e?e.payload:void 0,color:`color`in e?wE(e.color):void 0,fill:`fill`in e?wE(e.fill):void 0}}function EE(e,t){return e??t}var DE=(e,t,n,r,i,a,o)=>{if(!(t==null||a==null)){var s=n.chartData,c=n.computedData,l=n.dataStartIndex,u=n.dataEndIndex;return e.reduce((e,n)=>{var d=n.dataDefinedOnItem,f=n.settings,p=EE(d,s),m=Array.isArray(p)?Fu(p,l,u):p,h=f?.dataKey??r,g=f?.nameKey,_=r&&Array.isArray(m)&&!Array.isArray(m[0])&&o===`axis`?ui(m,r,i):a(m,t,c,g);return Array.isArray(_)?_.forEach(t=>{var n=TE(t),r=n?.name,i=n?.dataKey,a=n?.payload,o=_E(_E({},f),{},{name:r,unit:n?.unit,color:n?.color??f?.color,fill:n?.fill??f?.fill});e.push(ad({tooltipEntrySettings:o,dataKey:i,payload:a,value:G(a,i),name:r==null?void 0:String(r)}))}):e.push(ad({tooltipEntrySettings:f,dataKey:h,payload:_,value:G(_,h),name:G(_,g)??f?.name})),e},[])}},OE=V([ow,IC,Wg],uC),kE=V([V([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),ow,V([S_,C_],LC)],BC,{memoizeOptions:{resultEqualityCheck:b_}}),AE=V([kE],e=>e.filter(v_)),jE=V([kE],GC,{memoizeOptions:{resultEqualityCheck:b_}}),ME=V([kE],e=>e.some(e=>!e.data)),NE=V([jE,og],JC),PE=V([AE,og,ow],__),FE=V([NE,ow,kE,og,ME,jE],ZC),IE=V([ow],pw),LE=V([IE,V([ow],e=>e.allowDataOverflow)],xg),RE=V([V([PE,V([kE],e=>e.filter(v_)),Hg,Ug],lw),og,S_,LE],dw),zE=V([NE,ow,V([kE],UC),_w,S_,fg],bw,{memoizeOptions:{resultEqualityCheck:y_}}),BE=V([V([ww,S_,C_],Tw),S_],jw),VE=V([V([Dw,S_,C_],Tw),S_],Nw),HE=V([ow,K,NE,FE,Hg,S_,V([ow,IE,LE,RE,zE,V([BE,V([V([kw,S_,C_],Tw),S_],Lw),VE],yw),K,S_],zw)],Hw),UE=V([ow,HE,V([HE,ow,OE],Gw),S_],qw),WE=e=>nT(e,S_(e),C_(e),!1),GE=V([ow,WE],Zg),KE=V([V([ow,OE,UE,GE],sC)],w_),qE=V([K,ow,OE,KE,WE,V([K,FE,ow,S_],wT),V([K,FE,ow,S_],aT),S_],(e,t,n,r,i,a,o,s)=>{if(t){var c=t.type,l=Uu(e,s);if(r){var u=n===`scaleBand`&&r.bandwidth?r.bandwidth()/2:2,d=c===`category`&&r.bandwidth?r.bandwidth()/u:0;return d=s===`angleAxis`&&i!=null&&i?.length>=2?ni(i[0]-i[1])*2*d:d,l&&o?o.map((e,t)=>{var n=r.map(e);return W(n)?{coordinate:n+d,value:e,index:t,offset:d}:null}).filter(fi):r.domain().map((e,t)=>{var n=r.map(e);return W(n)?{coordinate:n+d,value:a?a[e]:e,index:t,offset:d}:null}).filter(fi)}}}),JE=V([jT,MT,LT],(e,t,n)=>NT(n.shared,e,t)),YE=e=>e.tooltip.settings.trigger,XE=e=>e.tooltip.settings.defaultIndex,ZE=V([hE,JE,YE,XE],sE),QE=V([ZE,NE,sw,HE],dE),$E=V([qE,QE],IT),eD=V([ZE],e=>{if(e)return e.dataKey}),tD=V([ZE],e=>{if(e)return e.graphicalItemId}),nD=V([hE,JE,YE,XE],pE),rD=V([ZE,V([ld,ud,K,Dd,qE,XE,nD],fE)],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),iD=V([ZE],e=>e?.active??!1),aD=V([V([nD,QE,og,sw,$E,mE,JE],DE)],e=>{if(e!=null){var t=e.map(e=>e.payload).filter(e=>e!=null);return Array.from(new Set(t))}});function oD(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function sD(e){for(var t=1;tB(ow),fD=()=>{var e=dD(),t=B(qE),n=B(KE);return id(!e||!n?void 0:sD(sD({},e),{},{scale:n}),t)};function pD(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function mD(e){for(var t=1;t{var i=t.find(e=>e&&e.index===n);if(i){if(e===`horizontal`)return{x:i.coordinate,y:r.relativeY};if(e===`vertical`)return{x:r.relativeX,y:i.coordinate}}return{x:0,y:0}},yD=(e,t,n,r)=>{var i=t.find(e=>e&&e.index===n);if(i){if(e===`centric`){var a=i.coordinate,o=r.radius;return mD(mD(mD({},r),Nh(r.cx,r.cy,o,a)),{},{angle:a,radius:o})}var s=i.coordinate,c=r.angle;return mD(mD(mD({},r),Nh(r.cx,r.cy,s,c)),{},{angle:c,radius:s})}return{angle:0,clockWise:!1,cx:0,cy:0,endAngle:0,innerRadius:0,outerRadius:0,radius:0,startAngle:0,x:0,y:0}};function bD(e,t){var n=e.relativeX,r=e.relativeY;return n>=t.left&&n<=t.left+t.width&&r>=t.top&&r<=t.top+t.height}var xD=(e,t,n,r,i)=>{var a=t?.length??0;if(a<=1||e==null)return 0;if(r===`angleAxis`&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var o=i[1]-i[0],s=(t,n,r)=>[e,e+o,e-o].some(e=>(r?e>=t:e>t)&&e<=n),c=0;c0?n[c-1]?.coordinate:n[a-1]?.coordinate,u=n[c]?.coordinate,d=c>=a-1?n[0]?.coordinate:n[c+1]?.coordinate,f=void 0;if(!(l==null||u==null||d==null))if(ni(u-l)!==ni(d-u)){var p=[];if(ni(d-u)===ni(i[1]-i[0])){f=d;var m=u+i[1]-i[0];p[0]=Math.min(m,(m+l)/2),p[1]=Math.max(m,(m+l)/2)}else{f=l;var h=d+i[1]-i[0];p[0]=Math.min(u,(h+u)/2),p[1]=Math.max(u,(h+u)/2)}var g=[Math.min(u,(f+u)/2),Math.max(u,(f+u)/2)];if(s(g[0],g[1],!1)||s(p[0],p[1],!0))return n[c]?.index}else{var _=Math.min(l,d),v=Math.max(l,d);if(s((_+u)/2,(v+u)/2,!1))return n[c]?.index}}else if(t)for(var y=0;y(b.coordinate+S.coordinate)/2||y>0&&y(b.coordinate+S.coordinate)/2&&e<=(b.coordinate+x.coordinate)/2)return b.index}}return-1},SD=()=>B(Wg),CD=(e,t)=>t,wD=(e,t,n)=>n,TD=(e,t,n,r)=>r,ED=V(qE,e=>Cs(e,e=>e.coordinate)),DD=V([hE,CD,wD,TD],sE),OD=V([DD,NE,sw,HE],dE),kD=(e,t,n)=>{if(t!=null){var r=hE(e);return t===`axis`?n===`hover`?r.axisInteraction.hover.dataKey:r.axisInteraction.click.dataKey:n===`hover`?r.itemInteraction.hover.dataKey:r.itemInteraction.click.dataKey}},AD=V([hE,CD,wD,TD],pE),jD=V([ld,ud,K,Dd,qE,TD,AD],fE),MD=V([DD,jD],(e,t)=>e.coordinate??t),ND=V([qE,OD],IT),PD=V([AD,OD,og,sw,ND,mE,CD],DE),FD=V([DD,OD],(e,t)=>({isActive:e.active&&t!=null,activeIndex:t})),ID=(e,t,n,r,i,a,o)=>{if(!(!e||!n||!r||!i)&&bD(e,o)){var s=xD(sd(e,t),a,i,n,r),c=vD(t,i,s,e);return{activeIndex:String(s),activeCoordinate:c}}},LD=(e,t,n,r,i,a,o)=>{if(!(!e||!r||!i||!a||!n)){var s=zh(e,n);if(s){var c=xD(cd(s,t),o,a,r,i),l=yD(t,a,c,s);return{activeIndex:String(c),activeCoordinate:l}}}},RD=(e,t,n,r,i,a,o,s)=>{if(!(!e||!t||!r||!i||!a))return t===`horizontal`||t===`vertical`?ID(e,t,r,i,a,o,s):LD(e,t,n,r,i,a,o)},zD=V(e=>e.zIndex.zIndexMap,(e,t)=>t,(e,t,n)=>n,(e,t,n)=>{if(t!=null){var r=e[t];if(r!=null)return n?r.panoramaElement:r.element}}),BD=V(e=>e.zIndex.zIndexMap,e=>{var t=Object.keys(e).map(e=>parseInt(e,10)).concat(Object.values(J));return Array.from(new Set(t)).sort((e,t)=>e-t)},{memoizeOptions:{resultEqualityCheck:x_}});function VD(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function HD(e){for(var t=1;tHD(HD({},e),{},{[t]:{element:void 0,panoramaElement:void 0,consumers:0}}),{})},qD=new Set(Object.values(J));function JD(e){return qD.has(e)}var YD=Bl({name:`zIndex`,initialState:KD,reducers:{registerZIndexPortal:{reducer:(e,t)=>{var n=t.payload.zIndex;e.zIndexMap[n]?e.zIndexMap[n].consumers+=1:e.zIndexMap[n]={consumers:1,element:void 0,panoramaElement:void 0}},prepare:U()},unregisterZIndexPortal:{reducer:(e,t)=>{var n=t.payload.zIndex;e.zIndexMap[n]&&(--e.zIndexMap[n].consumers,e.zIndexMap[n].consumers<=0&&!JD(n)&&delete e.zIndexMap[n])},prepare:U()},registerZIndexPortalElement:{reducer:(e,t)=>{var n=t.payload,r=n.zIndex,i=n.element,a=n.isPanorama;e.zIndexMap[r]?a?e.zIndexMap[r].panoramaElement=H(i):e.zIndexMap[r].element=H(i):e.zIndexMap[r]={consumers:0,element:a?void 0:H(i),panoramaElement:a?H(i):void 0}},prepare:U()},unregisterZIndexPortalElement:{reducer:(e,t)=>{var n=t.payload.zIndex;e.zIndexMap[n]&&(t.payload.isPanorama?e.zIndexMap[n].panoramaElement=void 0:e.zIndexMap[n].element=void 0)},prepare:U()}}}),XD=YD.actions,ZD=XD.registerZIndexPortal,QD=XD.unregisterZIndexPortal,$D=XD.registerZIndexPortalElement,eO=XD.unregisterZIndexPortalElement,tO=YD.reducer;function nO(e){var t=e.zIndex,n=e.children,r=Cf()&&t!==void 0&&t!==0,i=jd(),a=(0,A.useRef)(void 0),o=(0,A.useRef)(new Set),s=z(),c=B(e=>zD(e,t,i));if((0,A.useLayoutEffect)(()=>{if(!r){var e=o.current;e.forEach(e=>{s(QD({zIndex:e}))}),e.clear(),a.current=void 0;return}if(o.current.has(t)||(s(ZD({zIndex:t})),o.current.add(t)),c){a.current=c;var n=o.current;n.forEach(e=>{e!==t&&(s(QD({zIndex:e})),n.delete(e))})}},[s,t,r,c]),(0,A.useLayoutEffect)(()=>{var e=o.current;return()=>{e.forEach(e=>{s(QD({zIndex:e}))}),e.clear()}},[s]),!r)return n;var l=c??a.current;return l?(0,Jt.createPortal)(n,l):null}function rO(){return rO=Object.assign?Object.assign.bind():function(e){for(var t=1;t(0,A.useContext)(fO),mO=h(_(((e,t)=>{var n=Object.prototype.hasOwnProperty,r=`~`;function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(r=!1));function a(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,n,i,o){if(typeof n!=`function`)throw TypeError(`The listener must be a function`);var s=new a(n,i||e,o),c=r?r+t:t;return e._events[c]?e._events[c].fn?e._events[c]=[e._events[c],s]:e._events[c].push(s):(e._events[c]=s,e._eventsCount++),e}function s(e,t){--e._eventsCount===0?e._events=new i:delete e._events[t]}function c(){this._events=new i,this._eventsCount=0}c.prototype.eventNames=function(){var e=[],t,i;if(this._eventsCount===0)return e;for(i in t=this._events)n.call(t,i)&&e.push(r?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e},c.prototype.listeners=function(e){var t=r?r+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,a=n.length,o=Array(a);i{if(t&&Array.isArray(e)){var n=Number.parseInt(t,10);if(!ri(n))return e[n]}},yO=Bl({name:`options`,initialState:{chartName:``,tooltipPayloadSearcher:()=>void 0,eventEmitter:void 0,defaultTooltipEventType:`axis`},reducers:{createEventEmitter:e=>{e.eventEmitter??=Symbol(`rechartsEventEmitter`)}}}),bO=yO.reducer,xO=yO.actions.createEventEmitter;function SO(e){return e.tooltip.syncInteraction}var CO=Bl({name:`chartData`,initialState:{chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},reducers:{setChartData(e,t){if(e.chartData=H(t.payload),t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var n=t.payload,r=n.startIndex,i=n.endIndex;r!=null&&(e.dataStartIndex=r),i!=null&&(e.dataEndIndex=i)}}}),wO=CO.actions,TO=wO.setChartData,EO=wO.setDataStartEndIndexes;wO.setComputedData;var DO=CO.reducer,OO=[`x`,`y`];function kO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function AO(e){for(var t=1;t{if(e==null)return pi;var s=(s,c,l)=>{if(t!==l&&e===s){if(c.payload.active===!1){n(ZT({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(r===`index`){var u;if(o&&c!=null&&(u=c.payload)!=null&&u.coordinate&&c.payload.sourceViewBox){var d=c.payload.coordinate,f=d.x,p=d.y,m=PO(d,OO),h=c.payload.sourceViewBox,g=h.x,_=h.y,v=h.width,y=h.height,b=AO(AO({},m),{},{x:o.x+(v?(f-g)/v:0)*o.width,y:o.y+(y?(p-_)/y:0)*o.height});n(AO(AO({},c),{},{payload:AO(AO({},c.payload),{},{coordinate:b})}))}else n(c);return}if(i!=null){var x;typeof r==`function`?x=i[r(i,{activeTooltipIndex:c.payload.index==null?void 0:Number(c.payload.index),isTooltipActive:c.payload.active,activeIndex:c.payload.index==null?void 0:Number(c.payload.index),activeLabel:c.payload.label,activeDataKey:c.payload.dataKey,activeCoordinate:c.payload.coordinate})]:r===`value`&&(x=i.find(e=>String(e.value)===c.payload.label));var S=c.payload.coordinate;if(S==null||o==null){n(ZT({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(x==null){n(ZT({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:c.payload.sourceViewBox,graphicalItemId:void 0}));return}var C=S.x,w=S.y,T=Math.min(C,o.x+o.width),E=Math.min(w,o.y+o.height),D={x:a===`horizontal`?x.coordinate:T,y:a===`horizontal`?E:x.coordinate};n(ZT({active:c.payload.active,coordinate:D,dataKey:c.payload.dataKey,index:String(x.index),label:c.payload.label,sourceViewBox:c.payload.sourceViewBox,graphicalItemId:c.payload.graphicalItemId}))}}};return hO.on(gO,s),()=>{hO.off(gO,s)}},[B(e=>e.rootProps.className),n,t,e,r,i,a,o])}function LO(){var e=B(Gg),t=B(qg),n=z();(0,A.useEffect)(()=>{if(e==null)return pi;var r=(r,i,a)=>{t!==a&&e===r&&n(EO(i))};return hO.on(_O,r),()=>{hO.off(_O,r)}},[n,t,e])}function RO(){var e=z();(0,A.useEffect)(()=>{e(xO())},[e]),IO(),LO()}function zO(e,t,n,r,i,a){var o=B(n=>kD(n,e,t)),s=B(tD),c=B(qg),l=B(Gg),u=B(Kg),d=B(SO)?.sourceViewBox!=null,f=mf();(0,A.useEffect)(()=>{if(!d&&l!=null&&c!=null){var e=ZT({active:a,coordinate:n,dataKey:o,index:i,label:typeof r==`number`?String(r):r,sourceViewBox:f,graphicalItemId:s});hO.emit(gO,l,e,c)}},[d,n,o,s,i,r,c,l,u,a,f])}function BO(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function VO(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n{x(WT({shared:g,trigger:_,axisId:b,active:n,defaultIndex:S}))},[x,g,_,b,n,S]);var C=mf(),w=Bp(),T=FT(g),E=B(e=>FD(e,T,_,S))??{},D=E.activeIndex,O=E.isActive,k=B(e=>PD(e,T,_,S)),j=B(e=>ND(e,T,_,S)),M=B(e=>MD(e,T,_,S)),N=k,ee=pO(),te=n??O??!1,ne=GO(Fs([N,te]),2),re=ne[0],ie=ne[1],ae=T===`axis`?j:void 0;zO(T,_,M,ae,D,te);var oe=y??ee;if(oe==null||C==null||T==null)return null;var se=N??$O;te||(se=$O),s&&se.length&&(se=Go(se.filter(e=>e.value!=null&&(e.hide!==!0||t.includeHidden)),u,ZO));var ce=se.length>0,le=VO(VO({},t),{},{payload:se,label:ae,active:te,activeIndex:D,coordinate:M,accessibilityLayer:w}),ue=A.createElement(zp,{allowEscapeViewBox:r,animationDuration:i,animationEasing:a,isAnimationActive:c,active:te,coordinate:M,hasPayload:ce,offset:l,position:d,reverseDirection:f,useTranslate3d:p,viewBox:C,wrapperStyle:m,lastBoundingBox:re,innerRef:ie,hasPortalFromProps:!!y},QO(o,le));return A.createElement(A.Fragment,null,(0,Jt.createPortal)(ue,oe),te&&A.createElement(dO,{cursor:h,tooltipEventType:T,coordinate:M,payload:se,index:D}))}var nk=e=>null;nk.displayName=`Cell`;function rk(e,t,n){return(t=ik(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ik(e){var t=ak(e,`string`);return typeof t==`symbol`?t:t+``}function ak(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}var ok=class{constructor(e){rk(this,`cache`,new Map),this.maxSize=e}get(e){var t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxSize){var n=this.cache.keys().next().value;n!=null&&this.cache.delete(n)}this.cache.set(e,t)}clear(){this.cache.clear()}size(){return this.cache.size}};function sk(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ck(e){for(var t=1;t{try{var n=document.getElementById(hk);n||(n=document.createElement(`span`),n.setAttribute(`id`,hk),n.setAttribute(`aria-hidden`,`true`),document.body.appendChild(n)),Object.assign(n.style,mk,t),n.textContent=`${e}`;var r=n.getBoundingClientRect();return{width:r.width,height:r.height}}catch{return{width:0,height:0}}},vk=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(e==null||vp.isSsr)return{width:0,height:0};if(!fk.enableCache)return _k(e,t);var n=gk(e,t),r=pk.get(n);if(r)return r;var i=_k(e,t);return pk.set(n,i),i},yk;function bk(e,t){return Tk(e)||wk(e,t)||Sk(e,t)||xk()}function xk(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Sk(e,t){if(e){if(typeof e==`string`)return Ck(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Ck(e,t):void 0}}function Ck(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);ne.length)&&(t=e.length);for(var n=0,r=Array(t);n{var t=e.children,n=e.breakAll,r=e.style;try{var i=[];return R(t)||(i=n?t.toString().split(``):t.toString().split(nA)),{wordsWithComputedWidth:i.map(e=>({word:e,width:vk(e,r).width})),spaceWidth:n?0:vk(`\xA0`,r).width}}catch{return null}};function iA(e){return e===`start`||e===`middle`||e===`end`||e===`inherit`}function aA(e){return R(e)||typeof e==`string`||typeof e==`number`||typeof e==`boolean`}var oA=(e,t,n,r)=>e.reduce((e,i)=>{var a=i.word,o=i.width,s=e[e.length-1];if(s&&o!=null&&(t==null||r||s.width+o+ne.reduce((e,t)=>e.width>t.width?e:t),cA=`…`,lA=(e,t,n,r,i,a,o,s)=>{var c=rA({breakAll:n,style:r,children:e.slice(0,t)+cA});if(!c)return[!1,[]];var l=oA(c.wordsWithComputedWidth,a,o,s);return[l.length>i||sA(l).width>Number(a),l]},uA=(e,t,n,r,i)=>{var a=e.maxLines,o=e.children,s=e.style,c=e.breakAll,l=I(a),u=String(o),d=oA(t,r,n,i);if(!l||i||!(d.length>a||sA(d).width>Number(r)))return d;for(var f=0,p=u.length-1,m=0,h;f<=p&&m<=u.length-1;){var g=Math.floor((f+p)/2),_=Xk(lA(u,g-1,c,s,a,r,n,i),2),v=_[0],y=_[1],b=Xk(lA(u,g,c,s,a,r,n,i),1)[0];if(!v&&!b&&(f=g+1),v&&b&&(p=g-1),!v&&b){h=y;break}m++}return h||d},dA=e=>[{words:R(e)?[]:e.toString().split(nA),width:void 0}],fA=e=>{var t=e.width,n=e.scaleToFit,r=e.children,i=e.style,a=e.breakAll,o=e.maxLines;if((t||n)&&!vp.isSsr){var s,c,l=rA({breakAll:a,children:r,style:i});if(l){var u=l.wordsWithComputedWidth,d=l.spaceWidth;s=u,c=d}else return dA(r);return uA({breakAll:a,children:r,maxLines:o,style:i},s,c,t,!!n)}return dA(r)},pA=`#808080`,mA={angle:0,breakAll:!1,capHeight:`0.71em`,fill:pA,lineHeight:`1em`,scaleToFit:!1,textAnchor:`start`,verticalAnchor:`end`,x:0,y:0},hA=(0,A.forwardRef)((e,n)=>{var r=Na(e,mA),i=r.x,a=r.y,o=r.lineHeight,s=r.capHeight,c=r.fill,l=r.scaleToFit,u=r.textAnchor,d=r.verticalAnchor,f=Jk(r,Gk),p=(0,A.useMemo)(()=>fA({breakAll:f.breakAll,children:f.children,maxLines:f.maxLines,scaleToFit:l,style:f.style,width:f.width}),[f.breakAll,f.children,f.maxLines,l,f.style,f.width]),m=f.dx,h=f.dy,g=f.angle,_=f.className,v=f.breakAll,y=Jk(f,Kk);if(!ai(i)||!ai(a)||p.length===0)return null;var b=Number(i)+(I(m)?m:0),x=Number(a)+(I(h)?h:0);if(!W(b)||!W(x))return null;var S;switch(d){case`start`:S=Wk(`calc(${s})`);break;case`middle`:S=Wk(`calc(${(p.length-1)/2} * -${o} + (${s} / 2))`);break;default:S=Wk(`calc(${p.length-1} * -${o})`);break}var C=[],w=p[0];if(l&&w!=null){var T=w.width,E=f.width;C.push(`scale(${I(E)&&I(T)?E/T:1})`)}return g&&C.push(`rotate(${g}, ${b}, ${x})`),C.length&&(y.transform=C.join(` `)),A.createElement(`text`,qk({},Fr(y),{ref:n,x:b,y:x,className:t(`recharts-text`,_),textAnchor:u,fill:c.includes(`url`)?pA:c}),p.map((e,t)=>{var n=e.words.join(v?``:` `);return A.createElement(`tspan`,{x:b,dy:t===0?S:o,key:`${n}-${t}`},n)}))});hA.displayName=`Text`;var gA=[`labelRef`],_A=[`content`];function vA(e,t){if(e==null)return{};var n,r,i=yA(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var t=e.x,n=e.y,r=e.upperWidth,i=e.lowerWidth,a=e.width,o=e.height,s=e.children,c=(0,A.useMemo)(()=>({x:t,y:n,upperWidth:r,lowerWidth:i,width:a,height:o}),[t,n,r,i,a,o]);return A.createElement(EA.Provider,{value:c},s)},OA=()=>{var e=(0,A.useContext)(EA),t=mf();return e||(t?mi(t):void 0)},kA=(0,A.createContext)(null),AA=()=>{var e=(0,A.useContext)(kA),t=B(m_);return e||t},jA=e=>{var t=e.value,n=e.formatter,r=R(e.children)?t:e.children;return typeof n==`function`?n(r):r},MA=e=>e!=null&&typeof e==`function`,NA=(e,t)=>ni(t-e)*Math.min(Math.abs(t-e),360),PA=(e,n,r,i,a)=>{var o=e.offset,s=e.className,c=a.cx,l=a.cy,u=a.innerRadius,d=a.outerRadius,f=a.startAngle,p=a.endAngle,m=a.clockWise,h=(u+d)/2,g=NA(f,p),_=g>=0?1:-1,v,y;switch(n){case`insideStart`:v=f+_*o,y=m;break;case`insideEnd`:v=p-_*o,y=!m;break;case`end`:v=p+_*o,y=m;break;default:throw Error(`Unsupported position ${n}`)}y=g<=0?y:!y;var b=Nh(c,l,h,v),x=Nh(c,l,h,v+(y?1:-1)*359),S=`M${b.x},${b.y} + A${h},${h},0,1,${+!y}, + ${x.x},${x.y}`,C=R(e.id)?si(`recharts-radial-line-`):e.id;return A.createElement(`text`,TA({},i,{dominantBaseline:`central`,className:t(`recharts-radial-bar-label`,s)}),A.createElement(`defs`,null,A.createElement(`path`,{id:C,d:S})),A.createElement(`textPath`,{xlinkHref:`#${C}`},r))},FA=(e,t,n)=>{var r=e.cx,i=e.cy,a=e.innerRadius,o=e.outerRadius,s=(e.startAngle+e.endAngle)/2;if(n===`outside`){var c=Nh(r,i,o+t,s),l=c.x;return{x:l,y:c.y,textAnchor:l>=r?`start`:`end`,verticalAnchor:`middle`}}if(n===`center`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`middle`};if(n===`centerTop`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`start`};if(n===`centerBottom`)return{x:r,y:i,textAnchor:`middle`,verticalAnchor:`end`};var u=Nh(r,i,(a+o)/2,s);return{x:u.x,y:u.y,textAnchor:`middle`,verticalAnchor:`middle`}},IA=e=>e!=null&&`cx`in e&&I(e.cx),LA={angle:0,offset:5,zIndex:J.label,position:`middle`,textBreakAll:!1};function RA(e){if(!IA(e))return e;var t=e.cx,n=e.cy,r=e.outerRadius,i=r*2;return{x:t-r,y:n-r,width:i,upperWidth:i,lowerWidth:i,height:i}}function zA(e){var n=Na(e,LA),r=n.viewBox,i=n.parentViewBox,a=n.position,o=n.value,s=n.children,c=n.content,l=n.className,u=l===void 0?``:l,d=n.textBreakAll,f=n.labelRef,p=AA(),m=OA(),h=r==null?a===`center`?m:p??m:IA(r)?r:mi(r),g,_,v=RA(h);if(!h||R(o)&&R(s)&&!(0,A.isValidElement)(c)&&typeof c!=`function`)return null;var y=IA(h)&&(a===`insideStart`||a===`insideEnd`||a===`end`);if(IA(h))y||(_=FA(h,n.offset,n.position));else if(v){var b=bi({viewBox:v,position:a,offset:n.offset,parentViewBox:IA(i)?void 0:i,clamp:!0});_=xA(xA({x:b.x,y:b.y,textAnchor:b.horizontalAnchor,verticalAnchor:b.verticalAnchor},b.width===void 0?{}:{width:b.width}),b.height===void 0?{}:{height:b.height})}var x=xA(xA(xA(xA({},_?.x===void 0?{}:{x:_.x}),_?.y===void 0?{}:{y:_.y}),n),{},{viewBox:h});if((0,A.isValidElement)(c))return x.labelRef,(0,A.cloneElement)(c,vA(x,gA));if(typeof c==`function`){if(x.content,g=(0,A.createElement)(c,vA(x,_A)),(0,A.isValidElement)(g))return g}else g=jA(n);var S=Fr(n);return y&&IA(h)?PA(n,a,g,S,h):_==null?null:A.createElement(nO,{zIndex:n.zIndex},A.createElement(hA,TA({ref:f,className:t(`recharts-label`,u)},S,_,{textAnchor:iA(S.textAnchor)?S.textAnchor:_.textAnchor,breakAll:d}),g))}zA.displayName=`Label`;var BA=(e,t,n)=>{if(!e)return null;var r={viewBox:t,labelRef:n};return e===!0?A.createElement(zA,TA({key:`label-implicit`},r)):ai(e)?A.createElement(zA,TA({key:`label-implicit`,value:e},r)):(0,A.isValidElement)(e)?e.type===zA?(0,A.cloneElement)(e,xA({key:`label-implicit`},r)):A.createElement(zA,TA({key:`label-implicit`,content:e},r)):MA(e)?A.createElement(zA,TA({key:`label-implicit`,content:e},r)):e&&typeof e==`object`?A.createElement(zA,TA({},e,{key:`label-implicit`},r)):null};function VA(e){var t=e.label,n=e.labelRef;return BA(t,OA(),n)||null}var HA=[`valueAccessor`],UA=[`dataKey`,`clockWise`,`id`,`textBreakAll`,`zIndex`];function WA(){return WA=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=Array.isArray(e.value)?e.value[e.value.length-1]:e.value;if(aA(t))return t},JA=(0,A.createContext)(void 0),YA=JA.Provider,XA=(0,A.createContext)(void 0),ZA=XA.Provider;function QA(){return(0,A.useContext)(JA)}function $A(){return(0,A.useContext)(XA)}function ej(e){var t=e.valueAccessor,n=t===void 0?qA:t,r=GA(e,HA),i=r.dataKey;r.clockWise;var a=r.id,o=r.textBreakAll,s=r.zIndex,c=GA(r,UA),l=QA(),u=$A(),d=l||u;return!d||!d.length?null:A.createElement(nO,{zIndex:s??J.label},A.createElement(F,{className:`recharts-label-list`},d.map((e,t)=>{var s=R(i)?n(e,t):G(e.payload,i),l=R(a)?{}:{id:`${a}-${t}`};return A.createElement(zA,WA({key:`label-${t}`},Fr(e),c,l,{fill:r.fill??e.fill,parentViewBox:e.parentViewBox,value:s,textBreakAll:o,viewBox:e.viewBox,index:t,zIndex:0}))})))}ej.displayName=`LabelList`;function tj(e){var t=e.label;return t?t===!0?A.createElement(ej,{key:`labelList-implicit`}):A.isValidElement(t)||MA(t)?A.createElement(ej,{key:`labelList-implicit`,content:t}):typeof t==`object`?A.createElement(ej,WA({key:`labelList-implicit`},t,{type:String(t.type)})):null:null}function nj(){return nj=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=e.cx,r=e.cy,i=e.r,a=e.className,o=t(`recharts-dot`,a);return I(n)&&I(r)&&I(i)?A.createElement(`circle`,nj({},Nr(e),Ta(e),{className:o,cx:n,cy:r,r:i})):null},ij=e=>e.graphicalItems.polarItems,aj=V([ij,Z,V([Y,h_],LC)],BC),oj=V([V([aj],GC),sg],JC),sj=V([oj,Z,aj],XC);V([oj,Z,aj],(e,t,n)=>n.length>0?e.flatMap(e=>n.flatMap(n=>({value:G(e,t.dataKey??n.dataKey),errorDomain:[]}))).filter(Boolean):t?.dataKey==null?e.map(e=>({value:e,errorDomain:[]})):e.map(e=>({value:G(e,t.dataKey),errorDomain:[]})));var cj=()=>void 0,lj=V([Z,K,oj,sj,Hg,Y,V([Z,mw,hw,cj,V([oj,Z,aj,_w,Y,dg],bw),cj,K,Y],zw)],Hw);V([Ww,V([Z,lj,V([lj,FC,Ww],Gw),Y],qw)],T_);var uj=Bl({name:`polarAxis`,initialState:{radiusAxis:{},angleAxis:{}},reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=H(t.payload)},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=H(t.payload)},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),dj=uj.actions;dj.addRadiusAxis,dj.removeRadiusAxis,dj.addAngleAxis,dj.removeAngleAxis;var fj=uj.reducer;function pj(e){return e&&typeof e==`object`&&`className`in e&&typeof e.className==`string`?e.className:``}function mj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function hj(e){for(var t=1;tt],(e,t)=>e.filter(e=>e.type===`pie`).find(e=>e.id===t)),bj=[],xj=(e,t,n)=>n?.length===0?bj:n,Sj=V([sg,yj,xj],(e,t,n)=>{var r=e.chartData;if(t!=null){var i=t?.data!=null&&t.data.length>0?t.data:r;if((!i||!i.length)&&n!=null&&(i=n.map(e=>hj(hj({},t.presentationProps),e.props))),i!=null)return i}}),Cj=V([Sj,yj,xj],(e,t,n)=>{if(!(e==null||t==null))return e.map((e,r)=>{var i,a=G(e,t.nameKey,t.name),o=n!=null&&(i=n[r])!=null&&(i=i.props)!=null&&i.fill?n[r].props.fill:typeof e==`object`&&e&&`fill`in e?e.fill:t.fill;return{value:od(a,t.dataKey),dataKey:t.dataKey,color:o,payload:e,type:t.legendType}})}),wj=V([Sj,yj,xj,Dd],(e,t,n,r)=>{if(!(t==null||e==null))return uN({offset:r,pieSettings:t,displayedData:e,cells:n})}),Tj=_((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.suspense_list`),d=Symbol.for(`react.memo`),f=Symbol.for(`react.lazy`),p=Symbol.for(`react.view_transition`);function m(e){if(typeof e==`object`&&e){var m=e.$$typeof;switch(m){case t:switch(e=e.type,e){case r:case a:case i:case l:case u:case p:return e;default:switch(e&&=e.$$typeof,e){case s:case c:case f:case d:return e;case o:return e;default:return m}}case n:return m}}}e.isFragment=function(e){return m(e)===r}})),Ej=_(((e,t)=>{t.exports=Tj()}))(),Dj=e=>typeof e==`string`?e:e?e.displayName||e.name||`Component`:``,Oj=null,kj=null,Aj=e=>{if(e===Oj&&Array.isArray(kj))return kj;var t=[];return A.Children.forEach(e,e=>{R(e)||((0,Ej.isFragment)(e)?t=t.concat(Aj(e.props.children)):t.push(e))}),kj=t,Oj=e,t};function jj(e,t){var n=[],r=[];return r=Array.isArray(t)?t.map(e=>Dj(e)):[Dj(t)],Aj(e).forEach(e=>{var t=Zr(e,`type.displayName`)||Zr(e,`type.name`);t&&r.indexOf(t)!==-1&&n.push(e)}),n}var Mj=e=>e&&typeof e==`object`&&`clipDot`in e?!!e.clipDot:!0;function Nj(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Pj(e){for(var t=1;t{var r=z();return(i,a)=>o=>{e?.(i,a,o),r(GT({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}},Gj=e=>{var t=z();return(n,r)=>i=>{e?.(n,r,i),t(KT())}},Kj=(e,t,n)=>{var r=z();return(i,a)=>o=>{e?.(i,a,o),r(JT({activeIndex:String(a),activeDataKey:t,activeCoordinate:i.tooltipPosition,activeGraphicalItemId:n}))}};function qj(e){var t=e.tooltipEntrySettings,n=z(),r=jd(),i=(0,A.useRef)(null);return(0,A.useLayoutEffect)(()=>{r||(i.current===null?n(VT(t)):i.current!==t&&n(HT({prev:i.current,next:t})),i.current=t)},[t,n,r]),(0,A.useLayoutEffect)(()=>()=>{i.current&&=(n(UT(i.current)),null)},[n]),null}function Jj(e){var t=e.legendPayload,n=z(),r=jd(),i=(0,A.useRef)(null);return(0,A.useLayoutEffect)(()=>{r||(i.current===null?n(Df(t)):i.current!==t&&n(Of({prev:i.current,next:t})),i.current=t)},[n,r,t]),(0,A.useLayoutEffect)(()=>()=>{i.current&&=(n(kf(i.current)),null)},[n]),null}function Yj(e){var t=e.legendPayload,n=z(),r=B(K),i=(0,A.useRef)(null);return(0,A.useLayoutEffect)(()=>{r!==`centric`&&r!==`radial`||(i.current===null?n(Df(t)):i.current!==t&&n(Of({prev:i.current,next:t})),i.current=t)},[n,r,t]),(0,A.useLayoutEffect)(()=>()=>{i.current&&=(n(kf(i.current)),null)},[n]),null}function Xj(e,t){return tM(e)||eM(e,t)||Qj(e,t)||Zj()}function Zj(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qj(e,t){if(e){if(typeof e==`string`)return $j(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$j(e,t):void 0}}function $j(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n2&&arguments[2]!==void 0?arguments[2]:[],r=[];for(var i of n)r.push({status:`removed`,prev:i});for(var a=0;ae[Math.floor(r*n)]),t)}function oM(e,t){return iM(t.map((t,n)=>e[n]),t)}function sM(e,t){for(var n=new Map,r=0;r{var a=n(e,t);if(a!=null){var o=r.get(a);if(o!==void 0)return i.add(a),o}}),o=[];for(var s of r){var c=Xj(s,2),l=c[0],u=c[1];i.has(l)||o.push(u)}return iM(a,t,o)}function lM(e,t,n){return t==null?null:e==null?t.map(e=>({status:`added`,next:e})):n===`index`?aM(e,t):n===`append`?oM(e,t):cM(e,t,n)}function uM(e,t){var n=(0,A.useRef)(e),r=(0,A.useRef)(t.current),i=(0,A.useRef)(!0);n.current!==e&&(n.current=e,r.current=t.current,i.current=!1);var a=(0,A.useCallback)(function(e,n){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(n===0){i.current=!0;return}n===1&&(r.current=e),n>0&&i.current&&a&&(t.current=e)},[t]);return{startValue:r.current,syncStepValue:a}}function dM(e,t){return gM(e)||hM(e,t)||pM(e,t)||fM()}function fM(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pM(e,t){if(e){if(typeof e==`string`)return mM(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?mM(e,t):void 0}}function mM(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{typeof e==`function`&&e(),i(!0)},[e]),handleAnimationEnd:(0,A.useCallback)(()=>{typeof t==`function`&&t(),i(!1)},[t])}}function vM(e){var t=e.animationInput,n=e.animationIdPrefix,r=e.items,i=e.previousItemsRef,a=e.isAnimationActive,o=e.animationBegin,s=e.animationDuration,c=e.animationEasing,l=e.onAnimationStart,u=e.onAnimationEnd,d=e.animationInterpolateFn,f=e.animationMatchBy,p=e.shouldUpdatePreviousRef,m=e.children,h=e.layout,g=qm(t,n),_=uM(g,i),v=_.startValue??null,y=lM(v,r,f??nM);return A.createElement(Km,{animationId:g,begin:o,duration:s,isActive:a,easing:c,onAnimationEnd:u,onAnimationStart:l,key:g},e=>{var t=v==null,n=r==null?r:d(y,e,h),i=p?p(e):e>0;return _.syncStepValue(n,e,i),n==null?null:m(n,e,t)})}function yM(e,t){return wM(e)||CM(e,t)||xM(e,t)||bM()}function bM(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xM(e,t){if(e){if(typeof e==`string`)return SM(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?SM(e,t):void 0}}function SM(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);nyM(A.useState(()=>si(`uid-`)),1)[0]);function EM(e,t){var n=TM();return t||(e?`${e}-${n}`:n)}var DM=(0,A.createContext)(void 0),OM=e=>{var t=e.id,n=e.type,r=e.children,i=EM(`recharts-${n}`,t);return A.createElement(DM.Provider,{value:i},r(i))},kM=Bl({name:`graphicalItems`,initialState:{cartesianItems:[],polarItems:[]},reducers:{addCartesianGraphicalItem:{reducer(e,t){e.cartesianItems.push(H(t.payload))},prepare:U()},replaceCartesianGraphicalItem:{reducer(e,t){var n=t.payload,r=n.prev,i=n.next,a=fl(e).cartesianItems.indexOf(H(r));a>-1&&(e.cartesianItems[a]=H(i))},prepare:U()},removeCartesianGraphicalItem:{reducer(e,t){var n=fl(e).cartesianItems.indexOf(H(t.payload));n>-1&&e.cartesianItems.splice(n,1)},prepare:U()},addPolarGraphicalItem:{reducer(e,t){e.polarItems.push(H(t.payload))},prepare:U()},removePolarGraphicalItem:{reducer(e,t){var n=fl(e).polarItems.indexOf(H(t.payload));n>-1&&e.polarItems.splice(n,1)},prepare:U()},replacePolarGraphicalItem:{reducer(e,t){var n=t.payload,r=n.prev,i=n.next,a=fl(e).polarItems.indexOf(H(r));a>-1&&(e.polarItems[a]=H(i))},prepare:U()}}}),AM=kM.actions,jM=AM.addCartesianGraphicalItem,MM=AM.replaceCartesianGraphicalItem,NM=AM.removeCartesianGraphicalItem,PM=AM.addPolarGraphicalItem,FM=AM.removePolarGraphicalItem,IM=AM.replacePolarGraphicalItem,LM=kM.reducer,RM=(0,A.memo)(e=>{var t=z(),n=(0,A.useRef)(null);return(0,A.useLayoutEffect)(()=>{n.current===null?t(jM(e)):n.current!==e&&t(MM({prev:n.current,next:e})),n.current=e},[t,e]),(0,A.useLayoutEffect)(()=>()=>{n.current&&=(t(NM(n.current)),null)},[t]),null}),zM=(0,A.memo)(e=>{var t=z(),n=(0,A.useRef)(null);return(0,A.useLayoutEffect)(()=>{n.current===null?t(PM(e)):n.current!==e&&t(IM({prev:n.current,next:e})),n.current=e},[t,e]),(0,A.useLayoutEffect)(()=>()=>{n.current&&=(t(FM(n.current)),null)},[t]),null}),BM=[`key`],VM=[`onMouseEnter`,`onClick`,`onMouseLeave`],HM=[`id`],UM=[`id`];function WM(){return WM=Object.assign?Object.assign.bind():function(e){for(var t=1;tjj(e.children,nk),[e.children]),n=B(n=>Cj(n,e.id,t));return n==null?null:A.createElement(Yj,{legendPayload:n})}function $M(e){if(!(e==null||typeof e==`boolean`||typeof e==`function`)){if(A.isValidElement(e)){var t=e.props?.fill;return typeof t==`string`?t:void 0}var n=e.fill;return typeof n==`string`?n:void 0}}var eN=A.memo(e=>{var t=e.dataKey,n=e.nameKey,r=e.sectors,i=e.stroke,a=e.strokeWidth,o=e.fill,s=e.name,c=e.hide,l=e.tooltipType,u=e.formatter,d=e.id,f=e.activeShape,p=$M(f),m={dataDefinedOnItem:r.map(e=>{var t=e.tooltipPayload;return p==null||t==null?t:t.map(e=>Q(Q({},e),{},{color:p,fill:p}))}),getPosition:e=>r[Number(e)]?.tooltipPosition,settings:{stroke:i,strokeWidth:a,fill:o,dataKey:t,nameKey:n,name:od(s,t),hide:c,type:l,color:o,unit:``,formatter:u,graphicalItemId:d}};return A.createElement(qj,{tooltipEntrySettings:m})}),tN=(e,t)=>e>t?`start`:eci(typeof t==`function`?t(e):t,n,n*.8),rN=(e,t,n)=>{var r=t.top,i=t.left,a=t.width,o=t.height,s=Ph(a,o);return{cx:i+ci(e.cx,a,a/2),cy:r+ci(e.cy,o,o/2),innerRadius:ci(e.innerRadius,s,0),outerRadius:nN(n,e.outerRadius,s),maxRadius:e.maxRadius||Math.sqrt(a*a+o*o)/2}},iN=(e,t)=>ni(t-e)*Math.min(Math.abs(t-e),360),aN=(e,n)=>{if(A.isValidElement(e))return A.cloneElement(e,n);if(typeof e==`function`)return e(n);var r=t(`recharts-pie-label-line`,typeof e==`boolean`?``:e.className);n.key;var i=GM(n,BM);return A.createElement(tm,WM({},i,{type:`linear`,className:r}))},oN=(e,n,r)=>{if(A.isValidElement(e))return A.cloneElement(e,n);var i=r;if(typeof e==`function`&&(i=e(n),A.isValidElement(i)))return i;var a=t(`recharts-pie-label-text`,pj(e));return A.createElement(hA,WM({},n,{alignmentBaseline:`middle`,className:a}),i)};function sN(e){var t=e.sectors,n=e.props,r=e.showLabels,i=n.label,a=n.labelLine,o=n.dataKey;if(!r||!i||!t)return null;var s=Nr(n),c=Pr(i),l=Pr(a),u=typeof i==`object`&&`offsetRadius`in i&&typeof i.offsetRadius==`number`&&i.offsetRadius||20,d=t.map((e,t)=>{var n=(e.startAngle+e.endAngle)/2,r=Nh(e.cx,e.cy,e.outerRadius+u,n),d=Q(Q(Q(Q({},s),e),{},{stroke:`none`},c),{},{index:t,textAnchor:tN(r.x,e.cx)},r),f=Q(Q(Q(Q({},s),e),{},{fill:`none`,stroke:e.fill},l),{},{index:t,points:[Nh(e.cx,e.cy,e.outerRadius,n),r],key:`line`});return A.createElement(nO,{zIndex:J.label,key:`label-${e.startAngle}-${e.endAngle}-${e.midAngle}-${t}`},A.createElement(F,null,a&&aN(a,f),oN(i,d,G(e,o))))});return A.createElement(F,{className:`recharts-pie-labels`},d)}function cN(e){var t=e.sectors,n=e.props,r=e.showLabels,i=n.label;return typeof i==`object`&&i&&`position`in i?A.createElement(tj,{label:i}):A.createElement(sN,{sectors:t,props:n,showLabels:r})}function lN(e){var t=e.sectors,n=e.activeShape,r=e.inactiveShape,i=e.allOtherPieProps,a=e.shape,o=e.id,s=e.animationElapsedTime,c=e.isAnimating,l=e.isEntrance,u=B(QE),d=B(eD),f=B(tD),p=i.onMouseEnter,m=i.onClick,h=i.onMouseLeave,g=GM(i,VM),_=Wj(p,i.dataKey,o),v=Gj(h),y=Kj(m,i.dataKey,o);return t==null||t.length===0?null:A.createElement(A.Fragment,null,t.map((e,p)=>{if(e?.startAngle===0&&e?.endAngle===0&&t.length!==1)return null;var m=f==null||f===o,h=String(p)===u&&(d==null||i.dataKey===d)&&m,b=n&&h?n:u?r:null,x=Q(Q({},e),{},{stroke:e.stroke,tabIndex:-1,index:p,isActive:h,animationElapsedTime:s,isAnimating:c,isEntrance:l,[hd]:p,[gd]:o});return A.createElement(F,WM({key:`sector-${e?.startAngle}-${e?.endAngle}-${e.midAngle}-${p}`,tabIndex:-1,className:`recharts-pie-sector`},Da(g,e,p),{onMouseEnter:_(e,p),onMouseLeave:v(e,p),onClick:y(e,p)}),A.createElement(Uj,{option:b??a,DefaultShape:ZM,shapeProps:x}))}))}function uN(e){var t=e.pieSettings,n=e.displayedData,r=e.cells,i=e.offset,a=t.cornerRadius,o=t.startAngle,s=t.endAngle,c=t.dataKey,l=t.nameKey,u=t.tooltipType,d=Math.abs(t.minAngle),f=iN(o,s),p=Math.abs(f),m=n.length<=1?0:t.paddingAngle??0,h=n.filter(e=>G(e,c,0)!==0).length,g=(p>=360?h:h-1)*m,_=n.reduce((e,t)=>{var n=G(t,c,0);return e+(I(n)?n:0)},0),v=d>0&&_>0&&n.some(e=>{var t=G(e,c,0),n=(I(t)?t:0)/_;return t!==0&&n*p0){var x;b=n.map((e,n)=>{var s=G(e,c,0),d=G(e,l,n),p=rN(t,i,e),h=(I(s)?s:0)/_,g,b=Q(Q({},e),r&&r[n]&&r[n].props),S=b!=null&&`fill`in b&&typeof b.fill==`string`?b.fill:t.fill;g=n?x.endAngle+ni(f)*m*(s===0?0:1):o;var C=g+ni(f)*((s===0?0:v)+h*y),w=(g+C)/2,T=(p.innerRadius+p.outerRadius)/2,E=[{name:d,value:s,payload:b,dataKey:c,type:u,color:S,fill:S,graphicalItemId:t.id}],D=Nh(p.cx,p.cy,T,w);return x=Q(Q(Q(Q({},t.presentationProps),{},{percent:h,cornerRadius:typeof a==`string`?parseFloat(a):a,name:d,tooltipPayload:E,midAngle:w,middleRadius:T,tooltipPosition:D},b),p),{},{value:s,dataKey:c,startAngle:g,endAngle:C,payload:b,paddingAngle:s===0?0:ni(f)*m}),x})}return b}function dN(e){var t=e.showLabels,n=e.sectors,r=e.children,i=(0,A.useMemo)(()=>!t||!n?[]:n.map(e=>({value:e.value,payload:e.payload,clockWise:!1,parentViewBox:void 0,viewBox:{cx:e.cx,cy:e.cy,innerRadius:e.innerRadius,outerRadius:e.outerRadius,startAngle:e.startAngle,endAngle:e.endAngle,clockWise:!1},fill:e.fill})),[n,t]);return A.createElement(ZA,{value:t?i:void 0},r)}var fN=(e,t)=>{if(e==null)return[];var n=[],r=e.find(e=>e.status!==`removed`),i=r?r.next.startAngle:0;return e.forEach((e,r)=>{if(e.status!==`removed`){var a=r>0?Zr(e.next,`paddingAngle`,0):0;if(e.status===`matched`){var o=L(e.prev.endAngle-e.prev.startAngle,e.next.endAngle-e.next.startAngle,t),s=Q(Q({},e.next),{},{startAngle:i+a,endAngle:i+o+a});n.push(s),i=s.endAngle}else{var c=L(0,e.next.endAngle-e.next.startAngle,t),l=Q(Q({},e.next),{},{startAngle:i+a,endAngle:i+c+a});n.push(l),i=l.endAngle}}}),n};function pN(e){var t=e.props,n=e.previousSectorsRef,r=e.id,i=t.sectors,a=t.activeShape,o=t.inactiveShape,s=t.animationInterpolateFn,c=_M(t.onAnimationStart,t.onAnimationEnd),l=c.isAnimating,u=c.handleAnimationStart,d=c.handleAnimationEnd,f=Sf();return f==null?null:A.createElement(dN,{showLabels:!l,sectors:i},A.createElement(vM,{animationInput:t,animationIdPrefix:`recharts-pie-`,items:i,previousItemsRef:n,isAnimationActive:t.isAnimationActive,animationBegin:t.animationBegin,animationDuration:t.animationDuration,animationEasing:t.animationEasing,onAnimationStart:u,onAnimationEnd:d,animationInterpolateFn:s,animationMatchBy:t.animationMatchBy,layout:f},(e,n,i)=>A.createElement(F,null,A.createElement(lN,{sectors:e,activeShape:a,inactiveShape:o,allOtherPieProps:t,shape:t.shape,id:r,animationElapsedTime:n,isAnimating:l||n<1,isEntrance:i}))),A.createElement(cN,{showLabels:!l,sectors:i,props:t}),t.children)}var mN={animationBegin:400,animationDuration:1500,animationEasing:`ease`,animationInterpolateFn:fN,animationMatchBy:rM,cx:`50%`,cy:`50%`,dataKey:`value`,endAngle:360,fill:`#808080`,hide:!1,innerRadius:0,isAnimationActive:`auto`,label:!1,labelLine:!0,legendType:`rect`,minAngle:0,nameKey:`name`,outerRadius:`80%`,paddingAngle:0,rootTabIndex:0,shape:ZM,startAngle:0,stroke:`#fff`,zIndex:J.area};function hN(e){var n=e.id,r=GM(e,HM),i=e.hide,a=e.className,o=e.rootTabIndex,s=(0,A.useMemo)(()=>jj(e.children,nk),[e.children]),c=B(e=>wj(e,n,s)),l=(0,A.useRef)(null),u=t(`recharts-pie`,a);return i||c==null?(l.current=null,A.createElement(F,{tabIndex:o,className:u})):A.createElement(nO,{zIndex:e.zIndex},A.createElement(eN,{dataKey:e.dataKey,nameKey:e.nameKey,sectors:c,stroke:e.stroke,strokeWidth:e.strokeWidth,fill:e.fill,name:e.name,hide:e.hide,tooltipType:e.tooltipType,formatter:e.formatter,id:n,activeShape:e.activeShape}),A.createElement(F,{tabIndex:o,className:u},A.createElement(pN,{props:Q(Q({},r),{},{sectors:c}),previousSectorsRef:l,id:n})))}function gN(e){var t=Na(e,mN),n=t.id,r=GM(t,UM),i=Nr(r);return A.createElement(OM,{id:n,type:`pie`},e=>A.createElement(A.Fragment,null,A.createElement(zM,{type:`pie`,id:e,data:r.data,dataKey:r.dataKey,hide:r.hide,angleAxisId:0,radiusAxisId:0,name:r.name,nameKey:r.nameKey,tooltipType:r.tooltipType,legendType:r.legendType,fill:r.fill,cx:r.cx,cy:r.cy,startAngle:r.startAngle,endAngle:r.endAngle,paddingAngle:r.paddingAngle,minAngle:r.minAngle,innerRadius:r.innerRadius,outerRadius:r.outerRadius,cornerRadius:r.cornerRadius,presentationProps:i,maxRadius:t.maxRadius}),A.createElement(QM,WM({},r,{id:e})),A.createElement(hN,WM({},r,{id:e}))))}var _N=gN;_N.displayName=`Pie`;var vN=[`points`];function yN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function bN(e){for(var t=1;t{var s=bN(bN(bN({r:3},o),f),{},{index:r,cx:e.x??void 0,cy:e.y??void 0,dataKey:a,value:e.value,payload:e.payload,points:t});return A.createElement(DN,{key:`dot-${r}`,option:n,dotProps:s,className:i})}),m={};return s&&c!=null&&(m.clipPath=`url(#clipPath-${d?``:`dots-`}${c})`),A.createElement(nO,{zIndex:u},A.createElement(F,wN({className:r},m),p))}function AN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function jN(e){for(var t=1;t({top:e.top,bottom:e.bottom,left:e.left,right:e.right})),ld,ud],(e,t,n)=>{if(!(!e||t==null||n==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,n-e.top-e.bottom)}}),qN=()=>B(KN),JN=()=>B(aD);function YN(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function XN(e){for(var t=1;t{var t=e.point,n=e.childIndex,r=e.mainColor,i=e.activeDot,a=e.dataKey,o=e.clipPath;if(i===!1||t.x==null||t.y==null)return null;var s=XN(XN(XN({},{index:n,dataKey:a,cx:t.x,cy:t.y,r:4,fill:r??`none`,strokeWidth:2,stroke:`#fff`,payload:t.payload,value:t.value}),Pr(i)),Ta(i)),c=(0,A.isValidElement)(i)?(0,A.cloneElement)(i,s):typeof i==`function`?i(s):A.createElement(rj,s);return A.createElement(F,{className:`recharts-active-dot`,clipPath:o},c)};function tP(e){var t=e.points,n=e.mainColor,r=e.activeDot,i=e.itemDataKey,a=e.clipPath,o=e.zIndex,s=o===void 0?J.activeDot:o,c=B(QE),l=JN();if(t==null||l==null)return null;var u=t.find(e=>l.includes(e.payload));return R(u)?null:A.createElement(nO,{zIndex:s},A.createElement(eP,{point:u,childIndex:Number(c),mainColor:n,dataKey:i,activeDot:r,clipPath:a}))}function nP(e,t){return sP(e)||oP(e,t)||iP(e,t)||rP()}function rP(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iP(e,t){if(e){if(typeof e==`string`)return aP(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?aP(e,t):void 0}}function aP(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{var r=n??e;if(!R(r))return ci(r,t,0)},lP=(e,t,n)=>{var r={},i=e.filter(v_),a=e.filter(e=>e.stackId==null),o=i.reduce((e,t)=>{var n=e[t.stackId];return n??=[],n.push(t),e[t.stackId]=n,e},r),s=Object.entries(o).map(e=>{var r=nP(e,2),i=r[0],a=r[1];return{stackId:i,dataKeys:a.map(e=>e.dataKey),barSize:cP(t,n,a[0]?.barSize)}}),c=a.map(e=>({stackId:void 0,dataKeys:[e.dataKey].filter(e=>e!=null),barSize:cP(t,n,e.barSize)}));return[...s,...c]};function uP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function dP(e){for(var t=1;te+(t.barSize||0),0);d+=(a-1)*o,d>=n&&(d-=(a-1)*o,o=0),d>=n&&u>0&&(l=!0,u*=.9,d=a*u);var f={offset:Math.round((n-d)/2)-o,size:0};s=r.reduce((e,t)=>{var n={stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:f.offset+f.size+o,size:l?u:t.barSize??0}},r=[...e,n];return f=n.position,r},c)}else{var p=ci(t,n,0,!0);n-2*p-(a-1)*o<=0&&(o=0);var m=(n-2*p-(a-1)*o)/a;m>1&&(m=Math.round(m));var h=W(i)?Math.min(m,i):m;s=r.reduce((e,t,n)=>[...e,{stackId:t.stackId,dataKeys:t.dataKeys,position:{offset:p+(m+o)*n+(m-h)/2,size:h}}],c)}return s}}var gP=(e,t,n,r,i,a,o)=>{var s=R(o)?t:o,c=hP(n,r,i===a?a:i,e,s);return i!==a&&c!=null&&(c=c.map(e=>dP(dP({},e),{},{position:dP(dP({},e.position),{},{offset:e.position.offset-i/2})}))),c},_P=(e,t)=>{var n=g_(t);if(!(!e||n==null||t==null)){var r=t.stackId;if(r!=null){var i=e[r];if(i){var a=i.stackedData;if(a)return a.find(e=>e.key===n)}}}},vP=(e,t)=>{if(!(e==null||t==null)){var n=e.find(e=>e.stackId===t.stackId&&t.dataKey!=null&&e.dataKeys.includes(t.dataKey));if(n!=null)return n.position}};function yP(e,t){return e&&typeof e==`object`&&`zIndex`in e&&typeof e.zIndex==`number`&&W(e.zIndex)?e.zIndex:t}var bP=e=>{var t=e.chartData,n=z(),r=jd();return(0,A.useEffect)(()=>r?()=>{}:(n(TO(t)),()=>{n(TO(void 0))}),[t,n,r]),null},xP={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},SP=Bl({name:`brush`,initialState:xP,reducers:{setBrushSettings(e,t){return t.payload==null?xP:t.payload}}});SP.actions.setBrushSettings;var CP=SP.reducer,wP=(e,t)=>{var n=e.x,r=e.y,i=t.x,a=t.y;return{x:Math.min(n,i),y:Math.min(r,a),width:Math.abs(i-n),height:Math.abs(a-r)}},TP=e=>{var t=e.x1,n=e.y1,r=e.x2,i=e.y2;return wP({x:t,y:n},{x:r,y:i})};function EP(e){return(e%180+180)%180}var DP=function(e){var t=e.width,n=e.height,r=EP(arguments.length>1&&arguments[1]!==void 0?arguments[1]:0)*Math.PI/180,i=Math.atan(n/t),a=r>i&&r{e.dots.push(t.payload)},removeDot:(e,t)=>{var n=fl(e).dots.findIndex(e=>e===t.payload);n!==-1&&e.dots.splice(n,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var n=fl(e).areas.findIndex(e=>e===t.payload);n!==-1&&e.areas.splice(n,1)},addLine:(e,t)=>{e.lines.push(H(t.payload))},removeLine:(e,t)=>{var n=fl(e).lines.findIndex(e=>e===t.payload);n!==-1&&e.lines.splice(n,1)}}}),kP=OP.actions;kP.addDot,kP.removeDot,kP.addArea,kP.removeArea;var AP=kP.addLine,jP=kP.removeLine,MP=OP.reducer;function NP(e,t){return RP(e)||LP(e,t)||FP(e,t)||PP()}function PP(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FP(e,t){if(e){if(typeof e==`string`)return IP(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?IP(e,t):void 0}}function IP(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{var t=e.children,n=NP((0,A.useState)(`${si(`recharts`)}-clip`),1)[0],r=qN();if(r==null)return null;var i=r.x,a=r.y,o=r.width,s=r.height;return A.createElement(zP.Provider,{value:n},A.createElement(`defs`,null,A.createElement(`clipPath`,{id:n},A.createElement(`rect`,{x:i,y:a,height:s,width:o}))),t)},VP=()=>(0,A.useContext)(zP),HP=class{constructor(e){var t=e.x,n=e.y;this.xAxisScale=t,this.yAxisScale=n}map(e,t){var n=t.position;return{x:this.xAxisScale.map(e.x,{position:n})??0,y:this.yAxisScale.map(e.y,{position:n})??0}}mapWithFallback(e,t){var n=t.position,r=t.fallback,i=r===`rangeMin`?this.yAxisScale.rangeMin():r===`rangeMax`?this.yAxisScale.rangeMax():0,a=r===`rangeMin`?this.xAxisScale.rangeMin():r===`rangeMax`?this.xAxisScale.rangeMax():0;return{x:this.xAxisScale.map(e.x,{position:n})??a,y:this.yAxisScale.map(e.y,{position:n})??i}}isInRange(e){var t=e.x,n=e.y,r=t==null||this.xAxisScale.isInRange(t),i=n==null||this.yAxisScale.isInRange(n);return r&&i}};function UP(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function WP(e){for(var t=1;t{var n;if(A.isValidElement(e))n=A.cloneElement(e,t);else if(typeof e==`function`)n=e(t);else{if(!W(t.x1)||!W(t.y1)||!W(t.x2)||!W(t.y2))return null;n=A.createElement(`line`,JP({},t,{className:`recharts-reference-line-line`}))}return n},XP=(e,t,n,r,i,a)=>{var o=a.x,s=a.width,c=i.map(e,{position:n});if(!W(c)||t===`discard`&&!i.isInRange(c))return null;var l=[{x:o+s,y:c},{x:o,y:c}];return r===`left`?l.reverse():l},ZP=(e,t,n,r,i,a)=>{var o=a.y,s=a.height,c=i.map(e,{position:n});if(!W(c)||t===`discard`&&!i.isInRange(c))return null;var l=[{x:c,y:o+s},{x:c,y:o}];return r===`top`?l.reverse():l},QP=(e,t,n,r)=>{var i=[r.mapWithFallback(e[0],{position:n,fallback:`rangeMin`}),r.mapWithFallback(e[1],{position:n,fallback:`rangeMax`})];return t===`discard`&&i.some(e=>!r.isInRange(e))?null:i},$P=(e,t,n,r,i,a,o)=>{var s=o.x,c=o.y,l=o.segment,u=o.ifOverflow,d=ai(s);return ai(c)?XP(c,u,r,a,t,n):d?ZP(s,u,r,i,e,n):l!=null&&l.length===2?QP(l,u,r,new HP({x:e,y:t})):null};function eF(e){var t=z();return(0,A.useEffect)(()=>(t(AP(e)),()=>{t(jP(e))})),null}function tF(e){var n=e.xAxisId,r=e.yAxisId,i=e.shape,a=e.className,o=e.ifOverflow,s=jd(),c=VP(),l=B(e=>OC(e,n)),u=B(e=>jC(e,r)),d=B(e=>sT(e,`xAxis`,n,s)),f=B(e=>sT(e,`yAxis`,r,s)),p=mf();if(!c||!p||l==null||u==null||d==null||f==null)return null;var m=$P(d,f,p,e.position,l.orientation,u.orientation,e);if(!m)return null;var h=m[0],g=m[1];if(h==null||g==null)return null;var _=h.x,v=h.y,y=g.x,b=g.y,x=WP(WP({clipPath:o===`hidden`?`url(#${c})`:void 0},Fr(e)),{},{x1:_,y1:v,x2:y,y2:b}),S=TP({x1:_,y1:v,x2:y,y2:b});return A.createElement(nO,{zIndex:e.zIndex},A.createElement(F,{className:t(`recharts-reference-line`,a)},YP(i,x),A.createElement(DA,JP({},S,{lowerWidth:S.width,upperWidth:S.width}),A.createElement(VA,{label:e.label}),e.children)))}var nF={ifOverflow:`discard`,xAxisId:0,yAxisId:0,fill:`none`,label:!1,stroke:`#ccc`,fillOpacity:1,strokeWidth:1,position:`middle`,zIndex:J.line};function rF(e){var t=Na(e,nF);return A.createElement(A.Fragment,null,A.createElement(eF,{yAxisId:t.yAxisId,xAxisId:t.xAxisId,ifOverflow:t.ifOverflow,x:t.x,y:t.y,segment:t.segment}),A.createElement(tF,t))}rF.displayName=`ReferenceLine`;function iF(){}function aF(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype||Object.getPrototypeOf(t)===null?Object.prototype.toString.call(e)===`[object Object]`:!1}function oF(e,t,n){return sF(e,t,void 0,void 0,void 0,void 0,n)}function sF(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return cF(e,t,a,o)}return cF(e,t,a,o)}function cF(e,t,n,r){if(Object.is(e,t))return!0;let i=Va(e),a=Va(t);if(i===`[object Arguments]`&&(i=eo),a===`[object Arguments]`&&(a=eo),i!==a)return!1;switch(i){case Ua:return e.toString()===t.toString();case Wa:return So(e.valueOf(),t.valueOf());case Ga:case Ja:case qa:return Object.is(e.valueOf(),t.valueOf());case Ha:return e.source===t.source&&e.flags===t.flags;case Qa:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case Ya:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!sF(a,t.get(i),i,e,t,n,r))return!1;return!0;case Xa:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;osF(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case Za:case ro:case io:case ao:case oo:case so:case co:case lo:case uo:case fo:case po:case mo:if(go(e)!==go(t)||e.length!==t.length)return!1;for(let i=0;ie*i)return!1;var a=n();return e*(t-e*a/2-r)>=0&&e*(t+e*a/2-i)<=0}function mF(e,t){return uF(e,t+1)}function hF(e,t,n,r,i){for(var a=(r||[]).slice(),o=t.start,s=t.end,c=0,l=1,u=o,d=function(){var t=r?.[c];if(t===void 0)return{v:uF(r,l)};var a=c,d,f=()=>(d===void 0&&(d=n(t,a)),d),p=t.coordinate,m=c===0||pF(e,p,f,u,s);m||(c=0,u=o,l+=1),m&&(u=p+e*(f()/2+i),c+=l)},f;l<=a.length;)if(f=d(),f)return f.v;return[]}function gF(e,t,n,r,i){var a=(r||[]).slice().length;if(a===0)return[];for(var o=t.start,s=t.end,c=1;c<=a;c++){for(var l=(a-1)%c,u=o,d=!0,f=function(){var t=r[m];if(t==null)return 0;var a=m,o,c=()=>(o===void 0&&(o=n(t,a)),o),f=t.coordinate,p=m===l||pF(e,f,c,u,s);if(!p)return d=!1,1;p&&(u=f+e*(c()/2+i))},p,m=l;m(u===void 0&&(u=n(r,t)),u);if(t===o-1){var f=e*(l.coordinate+e*d()/2-c);a[t]=l=vF(vF({},l),{},{tickCoord:f>0?l.coordinate-f*e:l.coordinate})}else a[t]=l=vF(vF({},l),{},{tickCoord:l.coordinate});l.tickCoord!=null&&pF(e,l.tickCoord,d,s,c)&&(c=l.tickCoord-e*(d()/2+i),a[t]=vF(vF({},l),{},{isShow:!0}))},u=o-1;u>=0;u--)if(l(u))continue;return a}function CF(e,t,n,r,i,a){var o=(r||[]).slice(),s=o.length,c=t.start,l=t.end;if(a){var u=r[s-1];if(u!=null){var d=n(u,s-1),f=e*(u.coordinate+e*d/2-l);o[s-1]=u=vF(vF({},u),{},{tickCoord:f>0?u.coordinate-f*e:u.coordinate}),u.tickCoord!=null&&pF(e,u.tickCoord,()=>d,c,l)&&(l=u.tickCoord-e*(d/2+i),o[s-1]=vF(vF({},u),{},{isShow:!0}))}}for(var p=a?s-1:s,m=function(t){var r=o[t];if(r==null)return 1;var a=r,s,u=()=>(s===void 0&&(s=n(r,t)),s);if(t===0){var d=e*(a.coordinate-e*u()/2-c);o[t]=a=vF(vF({},a),{},{tickCoord:d<0?a.coordinate-d*e:a.coordinate})}else o[t]=a=vF(vF({},a),{},{tickCoord:a.coordinate});a.tickCoord!=null&&pF(e,a.tickCoord,u,c,l)&&(c=a.tickCoord+e*(u()/2+i),o[t]=vF(vF({},a),{},{isShow:!0}))},h=0;h{var i=typeof l==`function`?l(e.value,r):e.value;return p===`width`?dF(vk(i,{fontSize:t,letterSpacing:n}),m,d):vk(i,{fontSize:t,letterSpacing:n})[p]},g=i[0],_=i[1],v=i.length>=2&&g!=null&&_!=null?ni(_.coordinate-g.coordinate):1,y=fF(a,v,p);return c===`equidistantPreserveStart`?hF(v,y,h,i,o):c===`equidistantPreserveEnd`?gF(v,y,h,i,o):(f=c===`preserveStart`||c===`preserveStartEnd`?CF(v,y,h,i,o,c===`preserveStartEnd`):SF(v,y,h,i,o),f.filter(e=>e.isShow))}var TF=e=>{var t=e.ticks,n=e.label,r=e.labelGapWithTick,i=r===void 0?5:r,a=e.tickSize,o=a===void 0?0:a,s=e.tickMargin,c=s===void 0?0:s,l=0;if(t){Array.from(t).forEach(e=>{if(e){var t=e.getBoundingClientRect();t.width>l&&(l=t.width)}});var u=n?n.getBoundingClientRect().width:0,d=o+c,f=l+d+u+(n?i:0);return Math.round(f)}return 0},EF=e=>{var t=e.ticks,n=e.label,r=e.labelGapWithTick,i=r===void 0?5:r,a=e.tickSize,o=a===void 0?0:a,s=e.tickMargin,c=s===void 0?0:s,l=0;if(t){Array.from(t).forEach(e=>{if(e){var t=e.getBoundingClientRect();t.height>l&&(l=t.height)}});var u=n?n.getBoundingClientRect().height:0,d=o+c,f=l+d+u+(n?i:0);return Math.round(f)}return 0},DF=Bl({name:`renderedTicks`,initialState:{xAxis:{},yAxis:{}},reducers:{setRenderedTicks:(e,t)=>{var n=t.payload,r=n.axisType,i=n.axisId,a=n.ticks;e[r][i]=H(a)},removeRenderedTicks:(e,t)=>{var n=t.payload,r=n.axisType,i=n.axisId;delete e[r][i]}}}),OF=DF.actions,kF=OF.setRenderedTicks,AF=OF.removeRenderedTicks,jF=DF.reducer,MF=[`axisLine`,`width`,`height`,`className`,`hide`,`ticks`,`axisType`,`axisId`];function NF(e,t){return RF(e)||LF(e,t)||FF(e,t)||PF()}function PF(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FF(e,t){if(e){if(typeof e==`string`)return IF(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?IF(e,t):void 0}}function IF(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{if(!(r==null||n==null)){var e=t.map(e=>({value:e.value,coordinate:e.coordinate,offset:e.offset,index:e.index})),o=a.current;o!=null&&o.axisId===r&&o.axisType===n&&lF(o.ticks,e)||(a.current={ticks:e,axisId:r,axisType:n},i(kF({ticks:e,axisId:r,axisType:n})))}},[i,t,r,n]),(0,A.useEffect)(()=>r==null||n==null?pi:()=>{i(AF({axisId:r,axisType:n}))},[i,r,n]),null}var $F=(0,A.forwardRef)((e,n)=>{var r=e.ticks,i=r===void 0?[]:r,a=e.tick,o=e.tickLine,s=e.stroke,c=e.tickFormatter,l=e.unit,u=e.padding,d=e.tickTextProps,f=e.orientation,p=e.mirror,m=e.x,h=e.y,g=e.width,_=e.height,v=e.tickSize,y=e.tickMargin,b=e.fontSize,x=e.letterSpacing,S=e.getTicksConfig,C=e.events,w=e.axisType,T=e.axisId,E=wF($($({},S),{},{ticks:i}),b,x),D=Nr(S),O=Pr(a),k=iA(D.textAnchor)?D.textAnchor:YF(f,p),j=XF(f,p),M={};typeof o==`object`&&(M=o);var N=$($({},D),{},{fill:`none`},M),ee=E.map(e=>$({entry:e},JF(e,m,h,g,_,f,v,p,y))),te=ee.map(e=>{var n=e.entry,r=e.line;return A.createElement(F,{className:`recharts-cartesian-axis-tick`,key:`tick-${n.value}-${n.coordinate}-${n.tickCoord}`},o&&A.createElement(`line`,VF({},N,r,{className:t(`recharts-cartesian-axis-tick-line`,Zr(o,`className`))})))}),ne=ee.map((e,t)=>{var n=e.entry,r=e.tick,i=$($({},$($($($({verticalAnchor:j},D),{},{textAnchor:k,stroke:`none`,fill:s},r),{},{index:t,payload:n,visibleTicksCount:E.length,tickFormatter:c,padding:u},d),{},{angle:d?.angle??D.angle??0})),O);return A.createElement(F,VF({className:`recharts-cartesian-axis-tick-label`,key:`tick-label-${n.value}-${n.coordinate}-${n.tickCoord}`},Da(C,n,t)),a&&A.createElement(ZF,{option:a,tickProps:i,value:`${typeof c==`function`?c(n.value,t):n.value}${l||``}`}))});return A.createElement(`g`,{className:`recharts-cartesian-axis-ticks recharts-${w}-ticks`},A.createElement(QF,{ticks:E,axisId:T,axisType:w}),ne.length>0&&A.createElement(nO,{zIndex:J.label},A.createElement(`g`,{className:`recharts-cartesian-axis-tick-labels recharts-${w}-tick-labels`,ref:n},ne)),te.length>0&&A.createElement(`g`,{className:`recharts-cartesian-axis-tick-lines recharts-${w}-tick-lines`},te))}),eI=(0,A.forwardRef)((e,n)=>{var r=e.axisLine,i=e.width,a=e.height,o=e.className,s=e.hide,c=e.ticks,l=e.axisType,u=e.axisId,d=zF(e,MF),f=NF((0,A.useState)(``),2),p=f[0],m=f[1],h=NF((0,A.useState)(``),2),g=h[0],_=h[1],v=(0,A.useRef)(null);(0,A.useImperativeHandle)(n,()=>({getCalculatedWidth:()=>TF({ticks:v.current,label:e.labelRef?.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin}),getCalculatedHeight:()=>EF({ticks:v.current,label:e.labelRef?.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}));var y=(0,A.useCallback)(e=>{if(e){var t=e.getElementsByClassName(`recharts-cartesian-axis-tick-value`);v.current=t;var n=t[0];if(n){var r=window.getComputedStyle(n),i=r.fontSize,a=r.letterSpacing;(i!==p||a!==g)&&(m(i),_(a))}}},[p,g]);return s||i!=null&&i<=0||a!=null&&a<=0?null:A.createElement(nO,{zIndex:e.zIndex},A.createElement(F,{className:t(`recharts-cartesian-axis`,o)},A.createElement(qF,{x:e.x,y:e.y,width:i,height:a,orientation:e.orientation,mirror:e.mirror,axisLine:r,otherSvgProps:Nr(e)}),A.createElement($F,{ref:y,axisType:l,events:d,fontSize:p,getTicksConfig:e,height:e.height,letterSpacing:g,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:c,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:u}),A.createElement(DA,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},A.createElement(VA,{label:e.label,labelRef:e.labelRef}),e.children)))}),tI=A.forwardRef((e,t)=>{var n=Na(e,KF);return A.createElement(eI,VF({},n,{ref:t}))});tI.displayName=`CartesianAxis`;var nI=(0,A.createContext)({grid:{stroke:`#ccc`,fill:`none`}});nI.Provider;var rI=()=>(0,A.useContext)(nI),iI=[`x1`,`y1`,`x2`,`y2`,`key`],aI=[`offset`],oI=[`xAxisId`,`yAxisId`],sI=[`xAxisId`,`yAxisId`];function cI(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function lI(e){for(var t=1;t{var t=e.fill;if(!t||t===`none`)return null;var n=e.fillOpacity,r=e.x,i=e.y,a=e.width,o=e.height,s=e.ry;return A.createElement(`rect`,{x:r,y:i,ry:s,width:a,height:o,stroke:`none`,fill:t,fillOpacity:n,className:`recharts-cartesian-grid-bg`})};function _I(e){var t=e.option,n=e.lineItemProps,r;if(A.isValidElement(t))r=A.cloneElement(t,n);else if(typeof t==`function`)r=t(n);else{var i=n.x1,a=n.y1,o=n.x2,s=n.y2,c=n.key,l=Nr(mI(n,iI))??{};l.offset;var u=mI(l,aI),d=Array.isArray(u.strokeDasharray)?u.strokeDasharray.join(`,`):u.strokeDasharray;r=A.createElement(`line`,pI({},u,{strokeDasharray:d,x1:i,y1:a,x2:o,y2:s,fill:`none`,key:c}))}return r}function vI(e){var t=e.x,n=e.width,r=e.horizontal,i=r===void 0||r,a=e.horizontalPoints;if(!i||!a||!a.length)return null;e.xAxisId,e.yAxisId;var o=mI(e,oI),s=a.map((e,r)=>{var a=lI(lI({},o),{},{x1:t,y1:e,x2:t+n,y2:e,key:`line-${r}`,index:r});return A.createElement(_I,{key:`line-${r}`,option:i,lineItemProps:a})});return A.createElement(`g`,{className:`recharts-cartesian-grid-horizontal`},s)}function yI(e){var t=e.y,n=e.height,r=e.vertical,i=r===void 0||r,a=e.verticalPoints;if(!i||!a||!a.length)return null;e.xAxisId,e.yAxisId;var o=mI(e,sI),s=a.map((e,r)=>{var a=lI(lI({},o),{},{x1:e,y1:t,x2:e,y2:t+n,key:`line-${r}`,index:r});return A.createElement(_I,{option:i,lineItemProps:a,key:`line-${r}`})});return A.createElement(`g`,{className:`recharts-cartesian-grid-vertical`},s)}function bI(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,i=e.y,a=e.width,o=e.height,s=e.horizontalPoints,c=e.horizontal;if(!(c===void 0||c)||!t||!t.length||s==null)return null;var l=s.map(e=>Math.round(e+i-i)).sort((e,t)=>e-t);i!==l[0]&&l.unshift(0);var u=l.map((e,s)=>{var c=l[s+1],u=c==null?i+o-e:c-e;if(u<=0)return null;var d=s%t.length;return A.createElement(`rect`,{key:`react-${s}`,y:e,x:r,height:u,width:a,stroke:`none`,fill:t[d],fillOpacity:n,className:`recharts-cartesian-grid-bg`})});return A.createElement(`g`,{className:`recharts-cartesian-gridstripes-horizontal`},u)}function xI(e){var t=e.vertical,n=t===void 0||t,r=e.verticalFill,i=e.fillOpacity,a=e.x,o=e.y,s=e.width,c=e.height,l=e.verticalPoints;if(!n||!r||!r.length)return null;var u=l.map(e=>Math.round(e+a-a)).sort((e,t)=>e-t);a!==u[0]&&u.unshift(0);var d=u.map((e,t)=>{var n=u[t+1],l=n==null?a+s-e:n-e;if(l<=0)return null;var d=t%r.length;return A.createElement(`rect`,{key:`react-${t}`,x:e,y:o,width:l,height:c,stroke:`none`,fill:r[d],fillOpacity:i,className:`recharts-cartesian-grid-bg`})});return A.createElement(`g`,{className:`recharts-cartesian-gridstripes-vertical`},d)}var SI=(e,t)=>{var n=e.xAxis,r=e.width,i=e.height,a=e.offset;return Wu(wF(lI(lI(lI({},KF),n),{},{ticks:Gu(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.left,a.left+a.width,t)},CI=(e,t)=>{var n=e.yAxis,r=e.width,i=e.height,a=e.offset;return Wu(wF(lI(lI(lI({},KF),n),{},{ticks:Gu(n,!0),viewBox:{x:0,y:0,width:r,height:i}})),a.top,a.top+a.height,t)},wI={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:J.grid};function TI(e){var t=_f(),n=vf(),r=gf(),i=lI(lI({},Na(e,wI)),{},{x:I(e.x)?e.x:r.left,y:I(e.y)?e.y:r.top,width:I(e.width)?e.width:r.width,height:I(e.height)?e.height:r.height}),a=i.xAxisId,o=i.yAxisId,s=i.x,c=i.y,l=i.width,u=i.height,d=i.syncWithTicks,f=i.horizontalValues,p=i.verticalValues,m=jd(),h=B(e=>ET(e,`xAxis`,a,m)),g=B(e=>ET(e,`yAxis`,o,m)),_=rI(),v={stroke:i.stroke??_.grid.stroke,strokeWidth:i.strokeWidth??_.grid.strokeWidth,strokeOpacity:i.strokeOpacity??_.grid.strokeOpacity,strokeDasharray:i.strokeDasharray??_.grid.strokeDasharray};if(!Iu(l)||!Iu(u)||!I(s)||!I(c))return null;var y=i.verticalCoordinatesGenerator||SI,b=i.horizontalCoordinatesGenerator||CI,x=i.horizontalPoints,S=i.verticalPoints;if((!x||!x.length)&&typeof b==`function`){var C=f&&f.length,w=b({yAxis:g?lI(lI({},g),{},{ticks:C?f:g.ticks}):void 0,width:t??l,height:n??u,offset:r},C?!0:d);Ld(Array.isArray(w),`horizontalCoordinatesGenerator should return Array but instead it returned [${typeof w}]`),Array.isArray(w)&&(x=w)}if((!S||!S.length)&&typeof y==`function`){var T=p&&p.length,E=y({xAxis:h?lI(lI({},h),{},{ticks:T?p:h.ticks}):void 0,width:t??l,height:n??u,offset:r},T?!0:d);Ld(Array.isArray(E),`verticalCoordinatesGenerator should return Array but instead it returned [${typeof E}]`),Array.isArray(E)&&(S=E)}return A.createElement(nO,{zIndex:i.zIndex},A.createElement(`g`,{className:`recharts-cartesian-grid`},A.createElement(gI,{fill:i.fill??_.grid.fill,fillOpacity:i.fillOpacity??_.grid.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),A.createElement(bI,pI({},i,{horizontalPoints:x})),A.createElement(xI,pI({},i,{verticalPoints:S})),A.createElement(vI,pI({},i,v,{offset:r,horizontalPoints:x,xAxis:h,yAxis:g})),A.createElement(yI,pI({},i,v,{offset:r,verticalPoints:S,xAxis:h,yAxis:g}))))}TI.displayName=`CartesianGrid`;var EI=[`animationElapsedTime`,`isAnimating`,`isEntrance`,`visibleLength`,`strokeDasharray`,`connectNulls`];function DI(){return DI=Object.assign?Object.assign.bind():function(e){for(var t=1;te+t,0);if(!i)return jI(t,e);for(var a=Math.floor(e/i),o=e%i,s=[],c=0,l=0;co){s=[...r.slice(0,c),o-l];break}}var f=s.length%2==0?[0,t]:[t];return[...NI(r,a),...s,...f].map(e=>`${e}px`).join(`, `)}function FI(e,t,n){return e?PI(n,t,`${e}`.split(/[,\s]+/gim).map(e=>parseFloat(e))):jI(t,n)}function II(e){e.animationElapsedTime,e.isAnimating,e.isEntrance;var t=e.visibleLength,n=e.strokeDasharray,r=e.connectNulls,i=OI(e,EI),a=r??!1,o;if(t!=null){var s=i.pathRef;o=FI(n,AI(s?.current??null),t)}else n!=null&&(o=String(n));return A.createElement(tm,DI({},i,{connectNulls:a,strokeDasharray:o}))}function LI(e){var t=(0,A.useRef)(0),n=(0,A.useRef)(0),r=(0,A.useRef)(!1),i=(0,A.useRef)(e);return i.current!==e&&(t.current=n.current,i.current=e),(0,A.useCallback)((e,i)=>{if(r.current)return null;var a=Math.min(ei(t.current+e*i),i);return e>0&&i>0&&(n.current=Math.max(n.current,a),a>=i)?(r.current=!0,null):a},[])}var RI=Bl({name:`errorBars`,initialState:{},reducers:{addErrorBar:(e,t)=>{var n=t.payload,r=n.itemId,i=n.errorBar;e[r]||(e[r]=[]),e[r].push(i)},replaceErrorBar:(e,t)=>{var n=t.payload,r=n.itemId,i=n.prev,a=n.next;e[r]&&(e[r]=e[r].map(e=>e.dataKey===i.dataKey&&e.direction===i.direction?a:e))},removeErrorBar:(e,t)=>{var n=t.payload,r=n.itemId,i=n.errorBar;e[r]&&(e[r]=e[r].filter(e=>e.dataKey!==i.dataKey||e.direction!==i.direction))}}}),zI=RI.actions;zI.addErrorBar,zI.replaceErrorBar,zI.removeErrorBar;var BI=RI.reducer,VI=[`children`];function HI(e,t){if(e==null)return{};var n,r,i=UI(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r({x:0,y:0,value:0}),errorBarOffset:0});function GI(e){var t=e.children,n=HI(e,VI);return A.createElement(WI.Provider,{value:n},t)}function KI(e,t){var n=B(t=>OC(t,e)),r=B(e=>jC(e,t)),i=n?.allowDataOverflow??EC.allowDataOverflow,a=r?.allowDataOverflow??kC.allowDataOverflow;return{needClip:i||a,needClipX:i,needClipY:a}}function qI(e){var t=e.xAxisId,n=e.yAxisId,r=e.clipPathId,i=qN(),a=KI(t,n),o=a.needClipX,s=a.needClipY,c=a.needClip,l=B(e=>eT(e,t,!1)),u=B(e=>tT(e,n,!1));if(!c||!i)return null;var d=i.x,f=i.y,p=i.width,m=i.height,h=o&&l?Math.min(l[0],l[1]):d-p/2,g=s&&u?Math.min(u[0],u[1]):f-m/2,_=o&&l?Math.abs(l[1]-l[0]):p*2,v=s&&u?Math.abs(u[1]-u[0]):m*2;return A.createElement(`clipPath`,{id:`clipPath-${r}`},A.createElement(`rect`,{x:h,y:g,width:_,height:v}))}var JI=(e,t,n,r)=>kT(e,`xAxis`,t,r),YI=(e,t,n,r)=>OT(e,`xAxis`,t,r),XI=(e,t,n,r)=>kT(e,`yAxis`,n,r),ZI=(e,t,n,r)=>OT(e,`yAxis`,n,r),QI=V([K,JI,XI,YI,ZI],(e,t,n,r,i)=>Uu(e,`xAxis`)?id(t,r,!1):id(n,i,!1)),$I=(e,t,n,r,i)=>i;function eL(e){return e.type===`line`}var tL=V([K,JI,XI,YI,ZI,V([RC,$I],(e,t)=>e.filter(eL).find(e=>e.id===t)),QI,cg],(e,t,n,r,i,a,o,s)=>{var c=s.chartData,l=s.dataStartIndex,u=s.dataEndIndex;if(!(a==null||t==null||n==null||r==null||i==null||r.length===0||i.length===0||o==null||e!==`horizontal`&&e!==`vertical`)){var d=a.dataKey,f=a.data,p=f!=null&&f.length>0?f:c?.slice(l,u+1);if(p!=null)return DL({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataKey:d,bandSize:o,displayedData:p})}});function nL(e){var t=Pr(e),n=3,r=2;if(t!=null){var i=t.r,a=t.strokeWidth,o=Number(i),s=Number(a);return(Number.isNaN(o)||o<0)&&(o=n),(Number.isNaN(s)||s<0)&&(s=r),{r:o,strokeWidth:s}}return{r:n,strokeWidth:r}}var rL=[`id`],iL=[`type`,`layout`,`connectNulls`,`needClip`,`shape`,`strokeDasharray`],aL=[`activeDot`,`animateNewValues`,`animationBegin`,`animationDuration`,`animationEasing`,`connectNulls`,`dot`,`hide`,`isAnimationActive`,`label`,`legendType`,`xAxisId`,`yAxisId`,`id`];function oL(){return oL=Object.assign?Object.assign.bind():function(e){for(var t=1;t0?t/n:0}var gL={activeDot:!0,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:`ease`,animationInterpolateFn:(e,t)=>{if(e==null)return[];if(t===1)return e.flatMap(e=>e.status===`removed`?[]:[e.next]);var n=hL(e),r=[];for(var i of e)if(i.status===`matched`)r.push(uL(uL({},i.next),{},{x:L(i.prev.x,i.next.x,t),y:L(i.prev.y,i.next.y,t)}));else if(i.status===`added`)if(i.next.x!=null){var a=i.next.x-n;r.push(uL(uL({},i.next),{},{x:L(a,i.next.x,t),y:i.next.y}))}else r.push(i.next);else if(i.status===`removed`&&i.prev.x!=null){var o=i.prev.x+n;r.push(uL(uL({},i.prev),{},{x:L(i.prev.x,o,t),y:i.prev.y}))}return r},animationMatchBy:nM,connectNulls:!1,dot:!0,fill:`#fff`,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`line`,shape:II,stroke:`#3182bd`,strokeWidth:1,xAxisId:0,yAxisId:0,zIndex:J.line,type:`linear`},_L=e=>{var t=e.dataKey,n=e.name,r=e.stroke,i=e.legendType;return[{inactive:e.hide,dataKey:t,type:i,color:r,value:od(n,t),payload:e}]},vL=A.memo(e=>{var t=e.dataKey,n=e.data,r=e.stroke,i=e.strokeWidth,a=e.fill,o=e.name,s=e.hide,c=e.unit,l=e.formatter,u=e.tooltipType,d=e.id,f={dataDefinedOnItem:n,getPosition:pi,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:od(o,t),hide:s,type:u,color:r,unit:c,formatter:l,graphicalItemId:d}};return A.createElement(qj,{tooltipEntrySettings:f})});function yL(e){var t=e.clipPathId,n=e.points,r=e.props,i=r.dot,a=r.dataKey,o=r.needClip;r.id;var s=Nr(sL(r,rL));return A.createElement(kN,{points:n,dot:i,className:`recharts-line-dots`,dotClassName:`recharts-line-dot`,dataKey:a,baseProps:s,needClip:o,clipPathId:t})}function bL(e){var t=e.showLabels,n=e.children,r=e.points,i=(0,A.useMemo)(()=>r?.map(e=>{var t={x:e.x??0,y:e.y??0,width:0,lowerWidth:0,upperWidth:0,height:0};return uL(uL({},t),{},{value:e.value,payload:e.payload,viewBox:t,parentViewBox:void 0,fill:void 0})}),[r]);return A.createElement(YA,{value:t?i:void 0},n)}function xL(e){var t=e.clipPathId,n=e.pathRef,r=e.points,i=e.props,a=e.animationElapsedTime,o=e.isAnimating,s=e.isEntrance,c=e.visibleLength,l=i.type,u=i.layout,d=i.connectNulls,f=i.needClip,p=i.shape,m=i.strokeDasharray,h=uL(uL({},Fr(sL(i,iL))),{},{fill:`none`,className:`recharts-line-curve`,clipPath:f?`url(#clipPath-${t})`:void 0,points:r,type:l,layout:u,connectNulls:d,strokeDasharray:m??i.strokeDasharray,pathRef:n,animationElapsedTime:a,isAnimating:o,isEntrance:i.animateNewValues?s:!1,visibleLength:c});return A.createElement(A.Fragment,null,r?.length>1&&A.createElement(Uj,{option:p,DefaultShape:gL.shape,shapeProps:h}),A.createElement(yL,{points:r,clipPathId:t,props:i}))}function SL(e){var t=e.clipPathId,n=e.props,r=e.pathRef,i=e.previousPointsRef,a=n.points,o=n.isAnimationActive,s=n.animationBegin,c=n.animationDuration,l=n.animationEasing,u=n.animationMatchBy,d=n.animationInterpolateFn,f=n.layout,p=mL(r.current),m=_M(n.onAnimationStart,n.onAnimationEnd),h=m.isAnimating,g=m.handleAnimationStart,_=m.handleAnimationEnd,v=!h,y=LI(a),b=(0,A.useCallback)(e=>e>0&&p>0,[p]);return A.createElement(bL,{points:a,showLabels:v},n.children,A.createElement(vM,{animationInput:a,animationIdPrefix:`recharts-line-`,items:a,previousItemsRef:i,isAnimationActive:o,animationBegin:s,animationDuration:c,animationEasing:l,onAnimationStart:g,onAnimationEnd:_,animationInterpolateFn:d,animationMatchBy:u,shouldUpdatePreviousRef:b,layout:f},(e,i,a)=>{var o=h||i<1,s=o?y(i,p):null;return A.createElement(xL,{props:n,points:e,clipPathId:t,pathRef:r,animationElapsedTime:i,isAnimating:o,isEntrance:a,visibleLength:s})}),A.createElement(tj,{label:n.label}))}function CL(e){var t=e.clipPathId,n=e.props,r=(0,A.useRef)(null),i=(0,A.useRef)(null);return A.createElement(SL,{props:n,clipPathId:t,previousPointsRef:r,pathRef:i})}var wL=(e,t)=>({x:e.x??void 0,y:e.y??void 0,value:e.value,errorVal:G(e.payload,t)}),TL=class extends A.Component{render(){var e=this.props,n=e.hide,r=e.dot,i=e.points,a=e.className,o=e.xAxisId,s=e.yAxisId,c=e.top,l=e.left,u=e.width,d=e.height,f=e.id,p=e.needClip,m=e.zIndex;if(n)return null;var h=t(`recharts-line`,a),g=f,_=nL(r),v=_.r,y=_.strokeWidth,b=Mj(r),x=v*2+y,S=p?`url(#clipPath-${b?``:`dots-`}${g})`:void 0;return A.createElement(nO,{zIndex:m},A.createElement(F,{className:h},p&&A.createElement(`defs`,null,A.createElement(qI,{clipPathId:g,xAxisId:o,yAxisId:s}),!b&&A.createElement(`clipPath`,{id:`clipPath-dots-${g}`},A.createElement(`rect`,{x:l-x/2,y:c-x/2,width:u+x,height:d+x}))),A.createElement(GI,{xAxisId:o,yAxisId:s,data:i,dataPointFormatter:wL,errorBarOffset:0},A.createElement(CL,{props:this.props,clipPathId:g}))),A.createElement(tP,{activeDot:this.props.activeDot,points:i,mainColor:this.props.stroke,itemDataKey:this.props.dataKey,clipPath:S}))}};function EL(e){var t=Na(e,gL),n=t.activeDot,r=t.animateNewValues,i=t.animationBegin,a=t.animationDuration,o=t.animationEasing,s=t.connectNulls,c=t.dot,l=t.hide,u=t.isAnimationActive,d=t.label,f=t.legendType,p=t.xAxisId,m=t.yAxisId,h=t.id,g=sL(t,aL),_=KI(p,m).needClip,v=qN(),y=yf(),b=jd(),x=B(e=>tL(e,p,m,b,h));if(y!==`horizontal`&&y!==`vertical`||x==null||v==null)return null;var S=v.height,C=v.width,w=v.x,T=v.y;return A.createElement(TL,oL({},g,{id:h,connectNulls:s,dot:c,activeDot:n,animateNewValues:r,animationBegin:i,animationDuration:a,animationEasing:o,isAnimationActive:u,hide:l,label:d,legendType:f,xAxisId:p,yAxisId:m,points:x,layout:y,height:S,width:C,left:w,top:T,needClip:_}))}function DL(e){var t=e.layout,n=e.xAxis,r=e.yAxis,i=e.xAxisTicks,a=e.yAxisTicks,o=e.dataKey,s=e.bandSize;return e.displayedData.map((e,c)=>{var l=G(e,o);if(t===`horizontal`)return{x:Xu({axis:n,ticks:i,bandSize:s,entry:e,index:c}),y:(R(l)?null:r.scale.map(l))??null,value:l,payload:e};var u=R(l)?null:n.scale.map(l),d=Xu({axis:r,ticks:a,bandSize:s,entry:e,index:c});return u==null||d==null?null:{x:u,y:d,value:l,payload:e}}).filter(Boolean)}function OL(e){var t=Na(e,gL),n=jd();return A.createElement(OM,{id:t.id,type:`line`},e=>A.createElement(A.Fragment,null,A.createElement(Jj,{legendPayload:_L(t)}),A.createElement(vL,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,formatter:t.formatter,tooltipType:t.tooltipType,id:e}),A.createElement(RM,{type:`line`,id:e,data:t.data,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,hide:t.hide,isPanorama:n}),A.createElement(EL,oL({},t,{id:e}))))}var kL=A.memo(OL,Yf);kL.displayName=`Line`;function AL(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.xAxisId??0}function jL(e,t){return e.graphicalItems.cartesianItems.find(e=>e.id===t)?.yAxisId??0}var ML=(e,t,n)=>kT(e,`xAxis`,AL(e,t),n),NL=(e,t,n)=>OT(e,`xAxis`,AL(e,t),n),PL=(e,t,n)=>kT(e,`yAxis`,jL(e,t),n),FL=(e,t,n)=>OT(e,`yAxis`,jL(e,t),n),IL=V([K,ML,PL,NL,FL],(e,t,n,r,i)=>Uu(e,`xAxis`)?id(t,r,!1):id(n,i,!1)),LL=V([RC,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`area`).find(e=>e.id===t)),RL=e=>Uu(K(e),`xAxis`)?`yAxis`:`xAxis`,zL=(e,t)=>RL(e)===`yAxis`?jL(e,t):AL(e,t),BL=(e,t,n)=>uw(e,RL(e),zL(e,t),n),VL=V([K,ML,PL,NL,FL,V([LL,BL],(e,t)=>{if(!(e==null||t==null)){var n=e.stackId,r=g_(e);if(!(n==null||r==null)){var i=(t[n]?.stackedData)?.find(e=>e.key===r);if(i!=null)return i.map(e=>[e[0],e[1]])}}}),lg,IL,LL,Jg,V([LL,BL],(e,t)=>{if(!(e==null||e.stackId==null||t==null)){var n=t[e.stackId];if(n!=null)return n.graphicalItems.map(e=>e.dataKey).filter(fi)}})],(e,t,n,r,i,a,o,s,c,l,u)=>{var d=o.chartData,f=o.dataStartIndex,p=o.dataEndIndex;if(!(c==null||e!==`horizontal`&&e!==`vertical`||t==null||n==null||r==null||i==null||r.length===0||i.length===0||s==null)){var m=c.data,h=m&&m.length>0?m:d?.slice(f,p+1);if(h!=null)return bR({layout:e,xAxis:t,yAxis:n,xAxisTicks:r,yAxisTicks:i,dataStartIndex:f,areaSettings:c,stackedData:a,displayedData:h,chartBaseValue:l,bandSize:s,stackDataKeys:u})}}),HL=[`animationElapsedTime`,`isAnimating`,`isEntrance`,`layout`,`isRange`,`stroke`,`connectNulls`],UL=[`id`,`baseLine`];function WL(){return WL=Object.assign?Object.assign.bind():function(e){for(var t=1;te.y||0));return I(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(e=>e.y||0),c)),I(c)?A.createElement(`rect`,{x:ae.x||0));return I(n)?c=Math.max(n,c):n&&Array.isArray(n)&&n.length&&(c=Math.max(...n.map(e=>e.x||0),c)),I(c)?A.createElement(`rect`,{x:0,y:ae==null?[]:t===1?e.flatMap(e=>e.status===`removed`?[]:[e.next]):e.flatMap(e=>e.status===`matched`?[rR(rR({},e.next),{},{x:L(e.prev.x,e.next.x,t),y:L(e.prev.y,e.next.y,t)})]:e.status===`added`?[e.next]:[]),connectNulls:!1,dot:!1,fill:`#3182bd`,fillOpacity:.6,hide:!1,isAnimationActive:`auto`,legendType:`line`,stroke:`#3182bd`,strokeWidth:1,type:`linear`,label:!1,shape:XL,xAxisId:0,yAxisId:0,zIndex:J.area};function cR(e,t){return e&&e!==`none`?e:t}var lR=e=>{var t=e.dataKey,n=e.name,r=e.stroke,i=e.fill,a=e.legendType;return[{inactive:e.hide,dataKey:t,type:a,color:cR(r,i),value:od(n,t),payload:e}]},uR=A.memo(e=>{var t=e.dataKey,n=e.data,r=e.stroke,i=e.strokeWidth,a=e.fill,o=e.name,s=e.hide,c=e.unit,l=e.formatter,u=e.tooltipType,d=e.id,f={dataDefinedOnItem:n,getPosition:pi,settings:{stroke:r,strokeWidth:i,fill:a,dataKey:t,nameKey:void 0,name:od(o,t),hide:s,type:u,color:cR(r,a),unit:c,formatter:l,graphicalItemId:d}};return A.createElement(qj,{tooltipEntrySettings:f})});function dR(e){var t=e.clipPathId,n=e.points,r=e.props,i=r.needClip,a=r.dot,o=r.dataKey,s=Nr(r);return A.createElement(kN,{points:n,dot:a,className:`recharts-area-dots`,dotClassName:`recharts-area-dot`,dataKey:o,baseProps:s,needClip:i,clipPathId:t})}function fR(e){var t=e.showLabels,n=e.children,r=e.points.map(e=>{var t={x:e.x??0,y:e.y??0,width:0,lowerWidth:0,upperWidth:0,height:0};return rR(rR({},t),{},{value:e.value,payload:e.payload,parentViewBox:void 0,viewBox:t,fill:void 0})});return A.createElement(YA,{value:t?r:void 0},n)}function pR(e){var t=e.points,n=e.baseLine,r=e.needClip,i=e.clipPathId,a=e.props,o=e.animationElapsedTime,s=e.isAnimating,c=e.isEntrance,l=a.layout,u=a.type,d=a.stroke,f=a.connectNulls,p=a.isRange,m=a.shape,h=a.id,g=eR(a,ZL),_=rR(rR({},Fr(g)),{},{id:h,points:t,connectNulls:f,type:u,baseLine:n,layout:l,stroke:d,isRange:p,animationElapsedTime:o,isAnimating:s,isEntrance:c});return A.createElement(A.Fragment,null,t?.length>1&&A.createElement(F,{clipPath:r?`url(#clipPath-${i})`:void 0},A.createElement(Uj,{option:m,DefaultShape:sR.shape,shapeProps:_})),A.createElement(dR,{points:t,props:g,clipPathId:i}))}function mR(e,t,n){return I(e)?L(I(t)?t:void 0,e,n):R(e)||ri(e)?L(I(t)?t:void 0,0,n):e}function hR(e){var t=e.needClip,n=e.clipPathId,r=e.props,i=e.previousPointsRef,a=e.previousBaselineRef,o=r.points,s=r.baseLine,c=r.isAnimationActive,l=r.animationBegin,u=r.animationDuration,d=r.animationEasing,f=r.animationMatchBy,p=r.animationInterpolateFn,m=(0,A.useMemo)(()=>({points:o,baseLine:s}),[o,s]),h=uM(m,a),g=bf(),_=_M(r.onAnimationStart,r.onAnimationEnd),v=_.isAnimating,y=_.handleAnimationStart,b=_.handleAnimationEnd,x=h.startValue;if(g==null)return null;var S=Array.isArray(s)&&Array.isArray(x)?lM(x,s,f):Array.isArray(s)?lM(null,s,f):null;return A.createElement(vM,{animationInput:m,animationIdPrefix:`recharts-area-`,items:o,previousItemsRef:i,isAnimationActive:c,animationBegin:l,animationDuration:u,animationEasing:d,onAnimationStart:y,onAnimationEnd:b,animationInterpolateFn:p,animationMatchBy:f,layout:g},(e,i,a)=>{var c=i===1?s:Array.isArray(s)?p(S,i,g):a?s:mR(s,x,i);return h.syncStepValue(c,i),A.createElement(fR,{showLabels:!v,points:o},r.children,A.createElement(pR,{points:e,baseLine:c,needClip:t,clipPathId:n,props:r,animationElapsedTime:i,isAnimating:v||i<1,isEntrance:a}),A.createElement(tj,{label:r.label}))})}function gR(e){var t=e.needClip,n=e.clipPathId,r=e.props,i=(0,A.useRef)(null),a=(0,A.useRef)();return A.createElement(hR,{needClip:t,clipPathId:n,props:r,previousPointsRef:i,previousBaselineRef:a})}var _R=class extends A.PureComponent{render(){var e=this.props,n=e.hide,r=e.dot,i=e.points,a=e.className,o=e.top,s=e.left,c=e.needClip,l=e.xAxisId,u=e.yAxisId,d=e.width,f=e.height,p=e.id,m=e.baseLine,h=e.zIndex;if(n)return null;var g=t(`recharts-area`,a),_=p,v=nL(r),y=v.r,b=v.strokeWidth,x=Mj(r),S=y*2+b,C=c?`url(#clipPath-${x?``:`dots-`}${_})`:void 0;return A.createElement(nO,{zIndex:h},A.createElement(F,{className:g},c&&A.createElement(`defs`,null,A.createElement(qI,{clipPathId:_,xAxisId:l,yAxisId:u}),!x&&A.createElement(`clipPath`,{id:`clipPath-dots-${_}`},A.createElement(`rect`,{x:s-S/2,y:o-S/2,width:d+S,height:f+S}))),A.createElement(gR,{needClip:c,clipPathId:_,props:this.props})),A.createElement(tP,{points:i,mainColor:cR(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:C}),this.props.isRange&&Array.isArray(m)&&A.createElement(tP,{points:m,mainColor:cR(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:C}))}};function vR(e){var t=e.activeDot,n=e.animationBegin,r=e.animationDuration,i=e.animationEasing,a=e.connectNulls,o=e.dot,s=e.fill,c=e.fillOpacity,l=e.hide,u=e.isAnimationActive,d=e.legendType,f=e.stroke,p=e.xAxisId,m=e.yAxisId,h=eR(e,QL),g=yf(),_=SD(),v=KI(p,m).needClip,y=jd(),b=B(t=>VL(t,e.id,y))??{},x=b.points,S=b.isRange,C=b.baseLine,w=qN();if(g!==`horizontal`&&g!==`vertical`||w==null||_!==`AreaChart`&&_!==`ComposedChart`)return null;var T=w.height,E=w.width,D=w.x,O=w.y;return!x||!x.length?null:A.createElement(_R,$L({},h,{activeDot:t,animationBegin:n,animationDuration:r,animationEasing:i,baseLine:C,connectNulls:a,dot:o,fill:s,fillOpacity:c,height:T,hide:l,layout:g,isAnimationActive:u,isRange:S,legendType:d,needClip:v,points:x,stroke:f,width:E,left:D,top:O,xAxisId:p,yAxisId:m}))}var yR=(e,t,n,r,i)=>{var a=n??t;if(I(a))return a;var o=e===`horizontal`?i:r,s=o.scale.domain();if(o.type===`number`){var c=Math.max(s[0],s[1]),l=Math.min(s[0],s[1]);return a===`dataMin`?l:a===`dataMax`||c<0?c:Math.max(Math.min(s[0],s[1]),0)}return a===`dataMin`?s[0]:a===`dataMax`?s[1]:s[0]};function bR(e){var t=e.areaSettings,n=t.connectNulls,r=t.baseValue,i=t.dataKey,a=e.stackedData,o=e.layout,s=e.chartBaseValue,c=e.xAxis,l=e.yAxis,u=e.displayedData,d=e.dataStartIndex,f=e.xAxisTicks,p=e.yAxisTicks,m=e.bandSize,h=e.stackDataKeys,g=a&&a.length,_=yR(o,s,r,c,l),v=o===`horizontal`,y=!1,b=u.map((e,t)=>{var r;if(g)r=a[d+t];else{var o=G(e,i);Array.isArray(o)?(r=o,y=!0):r=[_,o]}var s=r?.[1]??null,u=G(e,i),b=g&&u==null&&h!=null&&h.length>0&&h.every(t=>G(e,t)==null),x=s==null||g&&!n&&u==null||b;return v?{x:Xu({axis:c,ticks:f,bandSize:m,entry:e,index:t}),y:x?null:l.scale.map(s)??null,value:r,payload:e}:{x:x?null:c.scale.map(s)??null,y:Xu({axis:l,ticks:p,bandSize:m,entry:e,index:t}),value:r,payload:e}});return{points:b,baseLine:(g||y?b.map(e=>{var t=Array.isArray(e.value)?e.value[0]:null;return v?{x:e.x,y:t!=null&&e.y!=null?l.scale.map(t)??null:null,payload:e.payload}:{x:t==null?null:c.scale.map(t)??null,y:e.y,payload:e.payload}}):v?l.scale.map(_):c.scale.map(_))??0,isRange:y}}function xR(e){var t=Na(e,sR),n=jd();return A.createElement(OM,{id:t.id,type:`area`},e=>A.createElement(A.Fragment,null,A.createElement(Jj,{legendPayload:lR(t)}),A.createElement(uR,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,formatter:t.formatter,tooltipType:t.tooltipType,id:e}),A.createElement(RM,{type:`area`,id:e,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:Yu(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:n,connectNulls:t.connectNulls}),A.createElement(vR,$L({},t,{id:e}))))}var SR=A.memo(xR,Yf);SR.displayName=`Area`;var CR=`Invariant failed`;function wR(e,t){if(!e)throw Error(CR)}var TR=[`option`];function ER(e,t){if(e==null)return{};var n,r,i=DR(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r1&&arguments[1]!==void 0?arguments[1]:0;return(n,r)=>{if(I(e))return e;var i=I(n)||R(n);return i?e(n,r):(!i&&wR(!1,`minPointSize callback function received a value with type of ${typeof n}. Currently only numbers or null/undefined are supported.`),t)}},jR=(e,t,n)=>n,MR=V([RC,(e,t)=>t],(e,t)=>e.filter(e=>e.type===`bar`).find(e=>e.id===t)),NR=V([MR],e=>e?.maxBarSize),PR=(e,t,n,r)=>r,FR=V([K,RC,AL,jL,jR],(e,t,n,r,i)=>t.filter(t=>e===`horizontal`?t.xAxisId===n:t.yAxisId===r).filter(e=>e.isPanorama===i).filter(e=>e.hide===!1).filter(e=>e.type===`bar`)),IR=(e,t,n)=>{var r=K(e),i=AL(e,t),a=jL(e,t);if(!(i==null||a==null))return r===`horizontal`?uw(e,`yAxis`,a,n):uw(e,`xAxis`,i,n)},LR=V([FR,Vg,(e,t)=>{var n=K(e),r=AL(e,t),i=jL(e,t);if(!(r==null||i==null))return n===`horizontal`?CT(e,`xAxis`,r):CT(e,`yAxis`,i)}],lP),RR=(e,t,n)=>{var r=MR(e,t);if(r==null)return 0;var i=AL(e,t),a=jL(e,t);if(i==null||a==null)return 0;var o=K(e),s=Rg(e),c=r.maxBarSize,l=R(c)?s:c,u,d;return o===`horizontal`?(u=kT(e,`xAxis`,i,n),d=OT(e,`xAxis`,i,n)):(u=kT(e,`yAxis`,a,n),d=OT(e,`yAxis`,a,n)),id(u,d,!0)??l??0},zR=(e,t,n)=>{var r=K(e),i=AL(e,t),a=jL(e,t);if(!(i==null||a==null)){var o,s;return r===`horizontal`?(o=kT(e,`xAxis`,i,n),s=OT(e,`xAxis`,i,n)):(o=kT(e,`yAxis`,a,n),s=OT(e,`yAxis`,a,n)),id(o,s)}},BR=V([Dd,kd,(e,t,n)=>{var r=AL(e,t);if(r!=null)return kT(e,`xAxis`,r,n)},(e,t,n)=>{var r=jL(e,t);if(r!=null)return kT(e,`yAxis`,r,n)},(e,t,n)=>{var r=AL(e,t);if(r!=null)return OT(e,`xAxis`,r,n)},(e,t,n)=>{var r=jL(e,t);if(r!=null)return OT(e,`yAxis`,r,n)},V([V([LR,Rg,zg,Bg,RR,zR,NR],gP),MR],vP),K,lg,zR,V([IR,MR],_P),MR,PR],(e,t,n,r,i,a,o,s,c,l,u,d,f)=>{var p=c.chartData,m=c.dataStartIndex,h=c.dataEndIndex;if(!(d==null||o==null||t==null||s!==`horizontal`&&s!==`vertical`||n==null||r==null||i==null||a==null||l==null)){var g=d.data,_=g!=null&&g.length>0?g:p?.slice(m,h+1);if(_!=null)return kz({layout:s,barSettings:d,pos:o,parentViewBox:t,bandSize:l,xAxis:n,yAxis:r,xAxisTicks:i,yAxisTicks:a,stackedData:u,displayedData:_,offset:e,cells:f,dataStartIndex:m})}}),VR=[`index`];function HR(){return HR=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=(0,A.useContext)(GR);if(t!=null)return t.stackId;if(e!=null)return Yu(e)},qR=(e,t)=>`recharts-bar-stack-clip-path-${e}-${t}`,JR=e=>{var t=(0,A.useContext)(GR);if(t!=null){var n=t.stackId;return`url(#${qR(n,e)})`}},YR=e=>{var t=e.index,n=UR(e,VR),r=JR(t);return A.createElement(F,HR({className:`recharts-bar-stack-layer`,clipPath:r},n))},XR=[`onMouseEnter`,`onMouseLeave`,`onClick`],ZR=[`value`,`background`,`tooltipPosition`],QR=[`id`],$R=[`onMouseEnter`,`onClick`,`onMouseLeave`];function ez(e,t){return az(e)||iz(e,t)||nz(e,t)||tz()}function tz(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nz(e,t){if(e){if(typeof e==`string`)return rz(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?rz(e,t):void 0}}function rz(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{var t=e.dataKey,n=e.name,r=e.fill,i=e.legendType;return[{inactive:e.hide,dataKey:t,type:i,color:r,value:od(n,t),payload:e}]},hz=A.memo(e=>{var t=e.dataKey,n=e.stroke,r=e.strokeWidth,i=e.fill,a=e.name,o=e.hide,s=e.unit,c=e.formatter,l=e.tooltipType,u=e.id,d={dataDefinedOnItem:void 0,getPosition:pi,settings:{stroke:n,strokeWidth:r,fill:i,dataKey:t,nameKey:void 0,name:od(a,t),hide:o,type:l,color:i,unit:s,formatter:c,graphicalItemId:u}};return A.createElement(qj,{tooltipEntrySettings:d})});function gz(e){var t=B(QE),n=e.data,r=e.dataKey,i=e.background,a=e.allOtherBarProps,o=a.onMouseEnter,s=a.onMouseLeave,c=a.onClick,l=fz(a,XR),u=Wj(o,r,a.id),d=Gj(s),f=Kj(c,r,a.id);if(!i||n==null)return null;var p=Pr(i);return A.createElement(nO,{zIndex:yP(i,J.barBackground)},n.map((e,n)=>{e.value;var a=e.background;e.tooltipPosition;var o=fz(e,ZR);if(!a)return null;var s=u(e,e.originalDataIndex),c=d(e,e.originalDataIndex),m=f(e,e.originalDataIndex),h=cz(cz(cz(cz(cz({option:i,isActive:String(e.originalDataIndex)===t},o),{},{fill:`#eee`},a),p),Da(l,e,n)),{},{onMouseEnter:s,onMouseLeave:c,onClick:m,dataKey:r,index:n,className:`recharts-bar-background-rectangle`});return A.createElement(kR,oz({key:`background-bar-${n}`},h))}))}function _z(e){var t=e.showLabels,n=e.children,r=e.rects?.map(e=>{var t={x:e.x,y:e.y,width:e.width,lowerWidth:e.width,upperWidth:e.width,height:e.height};return cz(cz({},t),{},{value:e.value,payload:e.payload,parentViewBox:e.parentViewBox,viewBox:t,fill:e.fill})});return A.createElement(YA,{value:t?r:void 0},n)}function vz(e){var t=e.shape,n=e.activeBar,r=e.baseProps,i=e.entry,a=e.index,o=e.dataKey,s=B(QE),c=B(eD),l=n&&String(i.originalDataIndex)===s&&(c==null||o===c),u=s!=null&&(String(i.originalDataIndex)!==s||c!=null&&o!==c),d=ez((0,A.useState)(!1),2),f=d[0],p=d[1],m=ez((0,A.useState)(!1),2),h=m[0],g=m[1];(0,A.useEffect)(()=>{var e;return l?(p(!0),e=requestAnimationFrame(()=>{g(!0)})):(g(!1),u&&p(!1)),()=>{cancelAnimationFrame(e)}},[l,u]);var _=(0,A.useCallback)(()=>{l||p(!1)},[l]),v=l&&h,y=l||f,b=l?n===!0?t:n:t,x=A.createElement(kR,oz({},r,{name:String(r.name)},i,{isActive:v,option:b,index:a,dataKey:o,animationElapsedTime:e.animationElapsedTime,isAnimating:e.isAnimating,isEntrance:e.isEntrance,onTransitionEnd:_}));return y?A.createElement(nO,{zIndex:J.activeBar},A.createElement(YR,{index:i.originalDataIndex},x)):x}function yz(e){var t=e.shape,n=e.baseProps,r=e.entry,i=e.index,a=e.dataKey;return A.createElement(kR,oz({},n,{name:String(n.name)},r,{isActive:!1,option:t,index:i,dataKey:a,animationElapsedTime:e.animationElapsedTime,isAnimating:e.isAnimating,isEntrance:e.isEntrance}))}function bz(e){var t=e.data,n=e.props,r=e.animationElapsedTime,i=e.isAnimating,a=e.isEntrance,o=Nr(n)??{},s=o.id,c=fz(o,QR),l=n.shape,u=n.dataKey,d=n.activeBar,f=n.onMouseEnter,p=n.onClick,m=n.onMouseLeave,h=fz(n,$R),g=Wj(f,u,s),_=Gj(m),v=Kj(p,u,s);return t?A.createElement(A.Fragment,null,t.map((e,t)=>A.createElement(YR,oz({index:e.originalDataIndex,key:`rectangle-${e?.x}-${e?.y}-${e?.value}-${t}`,className:`recharts-bar-rectangle`},Da(h,e,t),{onMouseEnter:g(e,e.originalDataIndex),onMouseLeave:_(e,e.originalDataIndex),onClick:v(e,e.originalDataIndex)}),d?A.createElement(vz,{shape:l,activeBar:d,baseProps:c,entry:e,index:t,dataKey:u,animationElapsedTime:r,isAnimating:i,isEntrance:a}):A.createElement(yz,{shape:l,baseProps:c,entry:e,index:t,dataKey:u,animationElapsedTime:r,isAnimating:i,isEntrance:a})))):null}var xz=(e,t,n)=>e==null?[]:t===1?e.flatMap(e=>e.status===`removed`?[]:[e.next]):e.flatMap(e=>{if(e.status===`removed`)return n===`horizontal`?[cz(cz({},e.prev),{},{height:L(e.prev.height,0,t),y:L(e.prev.y,e.prev.y+e.prev.height,t)})]:[cz(cz({},e.prev),{},{width:L(e.prev.width,0,t)})];if(e.status===`matched`)return[cz(cz({},e.next),{},{x:L(e.prev.x,e.next.x,t),y:L(e.prev.y,e.next.y,t),width:L(e.prev.width,e.next.width,t),height:L(e.prev.height,e.next.height,t)})];var r=e.next;return n===`horizontal`?[cz(cz({},r),{},{height:L(0,r.height,t),y:L(r.stackedBarStart,r.y,t)})]:[cz(cz({},r),{},{width:L(0,r.width,t),x:L(r.stackedBarStart,r.x,t)})]});function Sz(e){var t=e.props,n=e.previousRectanglesRef,r=t.data,i=t.isAnimationActive,a=t.animationBegin,o=t.animationDuration,s=t.animationEasing,c=t.animationInterpolateFn,l=t.layout,u=_M(t.onAnimationStart,t.onAnimationEnd),d=u.isAnimating,f=u.handleAnimationStart,p=u.handleAnimationEnd;return A.createElement(_z,{showLabels:!d,rects:r},A.createElement(vM,{animationInput:r,animationIdPrefix:`recharts-bar-`,items:r,previousItemsRef:n,isAnimationActive:i,animationBegin:a,animationDuration:o,animationEasing:s,onAnimationStart:f,onAnimationEnd:p,animationInterpolateFn:c,animationMatchBy:t.animationMatchBy,layout:l},(e,n,r)=>A.createElement(F,null,A.createElement(bz,{props:t,data:e,animationElapsedTime:n,isAnimating:d||n<1,isEntrance:r}))),A.createElement(tj,{label:t.label}),t.children)}function Cz(e){var t=(0,A.useRef)(null);return A.createElement(Sz,{previousRectanglesRef:t,props:e})}var wz=0,Tz=(e,t)=>{var n=Array.isArray(e.value)?e.value[1]:e.value;return{x:e.x,y:e.y,value:n,errorVal:G(e,t)}},Ez=class extends A.PureComponent{render(){var e=this.props,n=e.hide,r=e.data,i=e.dataKey,a=e.className,o=e.xAxisId,s=e.yAxisId,c=e.needClip,l=e.background,u=e.id;if(n||r==null)return null;var d=t(`recharts-bar`,a),f=u;return A.createElement(F,{className:d,id:u},c&&A.createElement(`defs`,null,A.createElement(qI,{clipPathId:f,xAxisId:o,yAxisId:s})),A.createElement(F,{className:`recharts-bar-rectangles`,clipPath:c?`url(#clipPath-${f})`:void 0},A.createElement(gz,{data:r,dataKey:i,background:l,allOtherBarProps:this.props}),A.createElement(Cz,this.props)))}},Dz={activeBar:!1,animationBegin:0,animationDuration:400,animationEasing:`ease`,animationInterpolateFn:xz,animationMatchBy:rM,background:!1,hide:!1,isAnimationActive:`auto`,label:!1,legendType:`rect`,minPointSize:wz,shape:OR,xAxisId:0,yAxisId:0,zIndex:J.bar};function Oz(e){var t=e.xAxisId,n=e.yAxisId,r=e.hide,i=e.legendType,a=e.minPointSize,o=e.activeBar,s=e.animationBegin,c=e.animationDuration,l=e.animationEasing,u=e.isAnimationActive,d=KI(t,n).needClip,f=yf(),p=jd(),m=jj(e.children,nk),h=B(t=>BR(t,e.id,p,m));if(f!==`vertical`&&f!==`horizontal`)return null;var g,_=h?.[0];return g=_==null||_.height==null||_.width==null?0:f===`vertical`?_.height/2:_.width/2,A.createElement(GI,{xAxisId:t,yAxisId:n,data:h,dataPointFormatter:Tz,errorBarOffset:g},A.createElement(Ez,oz({},e,{layout:f,needClip:d,data:h,xAxisId:t,yAxisId:n,hide:r,legendType:i,minPointSize:a,activeBar:o,animationBegin:s,animationDuration:c,animationEasing:l,isAnimationActive:u})))}function kz(e){var t=e.layout,n=e.barSettings,r=n.dataKey,i=n.minPointSize,a=n.hasCustomShape,o=e.pos,s=e.bandSize,c=e.xAxis,l=e.yAxis,u=e.xAxisTicks,d=e.yAxisTicks,f=e.stackedData,p=e.displayedData,m=e.offset,h=e.cells,g=e.parentViewBox,_=e.dataStartIndex,v=t===`horizontal`?l:c,y=f?v.scale.domain():null,b=Qu({numericAxis:v}),x=v.scale.map(b);return p.map((e,n)=>{var p,v,S,C,w,T;if(f){var E=f[n+_];if(E==null)return null;p=Ku(E,y)}else p=G(e,r),Array.isArray(p)||(p=[b,p]);var D=AR(i,wz)(p[1],n);if(t===`horizontal`){var O=l.scale.map(p[0]),k=l.scale.map(p[1]);if(O==null||k==null)return null;v=Zu({axis:c,ticks:u,bandSize:s,offset:o.offset,entry:e,index:n}),S=k??O??void 0,C=o.size;var A=O-k;if(w=ri(A)?0:A,T={x:v,y:m.top,width:C,height:m.height},Math.abs(D)>0&&Math.abs(w)0&&Math.abs(C)A.createElement(A.Fragment,null,A.createElement(Jj,{legendPayload:mz(t)}),A.createElement(hz,{dataKey:t.dataKey,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,formatter:t.formatter,tooltipType:t.tooltipType,id:e}),A.createElement(RM,{type:`bar`,id:e,data:void 0,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,dataKey:t.dataKey,stackId:n,hide:t.hide,barSize:t.barSize,minPointSize:t.minPointSize,maxBarSize:t.maxBarSize,isPanorama:r,hasCustomShape:t.shape!=null&&t.shape!==OR}),A.createElement(nO,{zIndex:t.zIndex},A.createElement(Oz,oz({},t,{id:e})))))}var jz=A.memo(Az,Yf);jz.displayName=`Bar`;var Mz=[`domain`,`range`],Nz=[`domain`,`range`];function Pz(e,t){if(e==null)return{};var n,r,i=Fz(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{if(o!=null)return Uz(Uz({},a),{},{type:o})},[a,o]);return(0,A.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(LN(s)):n.current!==s&&t(RN({prev:n.current,next:s})),n.current=s)},[s,t]),(0,A.useLayoutEffect)(()=>()=>{n.current&&=(t(zN(n.current)),null)},[t]),null}var Xz=e=>{var n=e.xAxisId,r=e.className,i=e.height,a=e.label,o=(0,A.useRef)(null),s=(0,A.useRef)(null),c=B(kd),l=jd(),u=z(),d=`xAxis`,f=B(e=>DT(e,d,n,l)),p=B(e=>hT(e,n)),m=B(e=>bT(e,n)),h=B(e=>DC(e,n));if((0,A.useLayoutEffect)(()=>{if(!(i!==`auto`||!p||MA(a)||(0,A.isValidElement)(a)||h==null)){var e=o.current;if(e){var t=e.getCalculatedHeight();Math.round(p.height)!==Math.round(t)&&u(WN({id:n,height:t}))}}},[f,p,u,a,n,i,h]),p==null||m==null||h==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var g=qz(e,zz);h.id,h.scale;var _=qz(h,Bz);return A.createElement(tI,Vz({},g,_,{ref:o,labelRef:s,x:m.x,y:m.y,width:p.width,height:p.height,className:t(`recharts-${d} ${d}`,r),viewBox:c,ticks:f,axisType:d,axisId:n}))},Zz={allowDataOverflow:EC.allowDataOverflow,allowDecimals:EC.allowDecimals,allowDuplicatedCategory:EC.allowDuplicatedCategory,angle:EC.angle,axisLine:KF.axisLine,height:EC.height,hide:!1,includeHidden:EC.includeHidden,interval:EC.interval,label:!1,minTickGap:EC.minTickGap,mirror:EC.mirror,orientation:EC.orientation,padding:EC.padding,reversed:EC.reversed,scale:EC.scale,tick:EC.tick,tickCount:EC.tickCount,tickLine:KF.tickLine,tickSize:KF.tickSize,type:EC.type,niceTicks:EC.niceTicks,xAxisId:0},Qz=A.memo(e=>{var t=Na(e,Zz);return A.createElement(A.Fragment,null,A.createElement(Yz,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),A.createElement(Xz,t))},Lz);Qz.displayName=`XAxis`;var $z=[`type`],eB=[`dangerouslySetInnerHTML`,`ticks`,`scale`],tB=[`id`,`scale`];function nB(){return nB=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if(o!=null)return iB(iB({},a),{},{type:o})},[o,a]);return(0,A.useLayoutEffect)(()=>{s!=null&&(n.current===null?t(BN(s)):n.current!==s&&t(VN({prev:n.current,next:s})),n.current=s)},[s,t]),(0,A.useLayoutEffect)(()=>()=>{n.current&&=(t(HN(n.current)),null)},[t]),null}function dB(e){var n=e.yAxisId,r=e.className,i=e.width,a=e.label,o=(0,A.useRef)(null),s=(0,A.useRef)(null),c=B(kd),l=jd(),u=z(),d=`yAxis`,f=B(e=>ST(e,n)),p=B(e=>xT(e,n)),m=B(e=>DT(e,d,n,l)),h=B(e=>AC(e,n));if((0,A.useLayoutEffect)(()=>{if(!(i!==`auto`||!f||MA(a)||(0,A.isValidElement)(a)||h==null)){var e=o.current;if(e){var t=e.getCalculatedWidth();Math.round(f.width)!==Math.round(t)&&u(UN({id:n,width:t}))}}},[m,f,u,a,n,i,h]),f==null||p==null||h==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var g=cB(e,eB);h.id,h.scale;var _=cB(h,tB);return A.createElement(tI,nB({},g,_,{ref:o,labelRef:s,x:p.x,y:p.y,tickTextProps:i===`auto`?{width:void 0}:{width:i},width:f.width,height:f.height,className:t(`recharts-${d} ${d}`,r),viewBox:c,ticks:m,axisType:d,axisId:n}))}var fB={allowDataOverflow:kC.allowDataOverflow,allowDecimals:kC.allowDecimals,allowDuplicatedCategory:kC.allowDuplicatedCategory,angle:kC.angle,axisLine:KF.axisLine,hide:!1,includeHidden:kC.includeHidden,interval:kC.interval,label:!1,minTickGap:kC.minTickGap,mirror:kC.mirror,orientation:kC.orientation,padding:kC.padding,reversed:kC.reversed,scale:kC.scale,tick:kC.tick,tickCount:kC.tickCount,tickLine:KF.tickLine,tickSize:KF.tickSize,type:kC.type,niceTicks:kC.niceTicks,width:kC.width,yAxisId:0},pB=A.memo(e=>{var t=Na(e,fB);return A.createElement(A.Fragment,null,A.createElement(uB,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),A.createElement(dB,t))},Lz);pB.displayName=`YAxis`;var mB=V([(e,t)=>t,K,m_,S_,GE,qE,ED,Dd],RD);function hB(e){return`getBBox`in e.currentTarget&&typeof e.currentTarget.getBBox==`function`}function gB(e){var t=e.currentTarget.getBoundingClientRect(),n,r;if(hB(e)){var i=e.currentTarget.getBBox();n=i.width>0?t.width/i.width:1,r=i.height>0?t.height/i.height:1}else{var a=e.currentTarget;n=a.offsetWidth>0?t.width/a.offsetWidth:1,r=a.offsetHeight>0?t.height/a.offsetHeight:1}var o=(e,i)=>({relativeX:Math.round((e-t.left)/n),relativeY:Math.round((i-t.top)/r)});return`touches`in e?Array.from(e.touches).map(e=>o(e.clientX,e.clientY)):o(e.clientX,e.clientY)}var _B=yl(`mouseClick`),vB=Eu();vB.startListening({actionCreator:_B,effect:(e,t)=>{var n=e.payload,r=mB(t.getState(),gB(n));r?.activeIndex!=null&&t.dispatch(XT({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}});var yB=yl(`mouseMove`),bB=Eu(),xB=null,SB=null,CB=null;bB.startListening({actionCreator:yB,effect:(e,t)=>{var n=e.payload,r=t.getState().eventSettings,i=r.throttleDelay,a=r.throttledEvents,o=a===`all`||a?.includes(`mousemove`);xB!==null&&(cancelAnimationFrame(xB),xB=null),SB!==null&&(typeof i!=`number`||!o)&&(clearTimeout(SB),SB=null),CB=gB(n);var s=()=>{var e=t.getState(),n=PT(e,e.tooltip.settings.shared);if(!CB){xB=null,SB=null;return}if(n===`axis`){var r=mB(e,CB);r?.activeIndex==null?t.dispatch(qT()):t.dispatch(YT({activeIndex:r.activeIndex,activeDataKey:void 0,activeCoordinate:r.activeCoordinate}))}xB=null,SB=null};if(!o){s();return}i===`raf`?xB=requestAnimationFrame(s):typeof i==`number`&&SB===null&&(SB=setTimeout(s,i))}});function wB(e,t){return t instanceof HTMLElement?`HTMLElement <${t.tagName} class="${t.className}">`:t===window?`global.window`:e===`children`&&typeof t==`object`&&t?`<>`:t}var TB={accessibilityLayer:!0,barCategoryGap:`10%`,barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:`none`,syncId:void 0,syncMethod:`index`,baseValue:void 0,reverseStackOrder:!1},EB=Bl({name:`rootProps`,initialState:TB,reducers:{updateOptions:(e,t)=>{e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=t.payload.barGap??TB.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className,e.baseValue=t.payload.baseValue,e.reverseStackOrder=t.payload.reverseStackOrder}}}),DB=EB.reducer,OB=EB.actions.updateOptions,kB=Bl({name:`polarOptions`,initialState:null,reducers:{updatePolarOptions:(e,t)=>e===null?t.payload:(e.startAngle=t.payload.startAngle,e.endAngle=t.payload.endAngle,e.cx=t.payload.cx,e.cy=t.payload.cy,e.innerRadius=t.payload.innerRadius,e.outerRadius=t.payload.outerRadius,e)}}),AB=kB.actions.updatePolarOptions,jB=kB.reducer,MB=yl(`keyDown`),NB=yl(`focus`),PB=yl(`blur`),FB=Eu(),IB=null,LB=null,RB=null;FB.startListening({actionCreator:MB,effect:(e,t)=>{RB=e.payload,IB!==null&&(cancelAnimationFrame(IB),IB=null);var n=t.getState().eventSettings,r=n.throttleDelay,i=n.throttledEvents,a=i===`all`||i.includes(`keydown`);LB!==null&&(typeof r!=`number`||!a)&&(clearTimeout(LB),LB=null);var o=()=>{try{var e=t.getState();if(e.rootProps.accessibilityLayer===!1)return;var n=e.tooltip.keyboardInteraction,r=RB;if(r!==`ArrowRight`&&r!==`ArrowLeft`&&r!==`Enter`)return;var i=dE(n,NE(e),sw(e),HE(e)),a=i==null?-1:Number(i),o=!Number.isFinite(a)||a<0,s=qE(e),c=NE(e),l=PT(e,e.tooltip.settings.shared);if(r===`Enter`){if(o)return;var u=jD(e,l,`hover`,String(n.index));t.dispatch(QT({active:!n.active,activeIndex:n.index,activeCoordinate:u}));return}var d=AT(e)===`left-to-right`?1:-1,f=r===`ArrowRight`?1:-1,p;if(o){var m=sw(e),h=HE(e),g=f*d,_=e=>({active:!1,index:String(e),dataKey:void 0,graphicalItemId:void 0,coordinate:void 0});if(p=-1,g>0){for(var v=0;v=0;y--)if(dE(_(y),c,m,h)!=null){p=y;break}if(p<0)return}else{p=a+f*d;var b=s?.length||c.length;if(b===0||p>=b||p<0)return}var x=jD(e,l,`hover`,String(p));t.dispatch(QT({active:!0,activeIndex:p.toString(),activeCoordinate:x}))}finally{IB=null,LB=null}};if(!a){o();return}r===`raf`?IB=requestAnimationFrame(o):typeof r==`number`&&LB===null&&(o(),RB=null,LB=setTimeout(()=>{RB?o():(LB=null,IB=null)},r))}}),FB.startListening({actionCreator:NB,effect:(e,t)=>{var n=t.getState();if(n.rootProps.accessibilityLayer!==!1){var r=n.tooltip.keyboardInteraction;if(!r.active&&r.index==null){var i=`0`,a=jD(n,PT(n,n.tooltip.settings.shared),`hover`,String(i));t.dispatch(QT({active:!0,activeIndex:i,activeCoordinate:a}))}}}}),FB.startListening({actionCreator:PB,effect:(e,t)=>{var n=t.getState();if(n.rootProps.accessibilityLayer!==!1){var r=n.tooltip.keyboardInteraction;r.active&&t.dispatch(QT({active:!1,activeIndex:r.index,activeCoordinate:r.coordinate}))}}});function zB(e){e.persist();var t=e.currentTarget;return new Proxy(e,{get:(e,n)=>{if(n===`currentTarget`)return t;var r=Reflect.get(e,n);return typeof r==`function`?r.bind(e):r}})}var BB=yl(`externalEvent`),VB=Eu(),HB=new Map,UB=new Map,WB=new Map;VB.startListening({actionCreator:BB,effect:(e,t)=>{var n=e.payload,r=n.handler,i=n.reactEvent;if(r!=null){var a=i.type,o=zB(i);WB.set(a,{handler:r,reactEvent:o});var s=HB.get(a);s!==void 0&&(cancelAnimationFrame(s),HB.delete(a));var c=t.getState().eventSettings,l=c.throttleDelay,u=c.throttledEvents,d=u===`all`||u?.includes(a),f=UB.get(a);f!==void 0&&(typeof l!=`number`||!d)&&(clearTimeout(f),UB.delete(a));var p=()=>{var e=WB.get(a);try{if(!e)return;var n=e.handler,r=e.reactEvent,i=t.getState(),o={activeCoordinate:rD(i),activeDataKey:eD(i),activeIndex:QE(i),activeLabel:$E(i),activeTooltipIndex:QE(i),isTooltipActive:iD(i)};n&&n(o,r)}finally{HB.delete(a),UB.delete(a),WB.delete(a)}};if(!d){p();return}if(l===`raf`){var m=requestAnimationFrame(p);HB.set(a,m)}else if(typeof l==`number`){if(!UB.has(a)){p();var h=setTimeout(p,l);UB.set(a,h)}}else p()}}});var GB=V([V([hE],e=>e.tooltipItemPayloads),(e,t)=>t,(e,t,n)=>n],(e,t,n)=>{if(t!=null){var r=e.find(e=>e.settings.graphicalItemId===n);if(r!=null){var i=r.getPosition;if(i!=null)return i(t)}}}),KB=yl(`touchMove`),qB=Eu(),JB=null,YB=null,XB=null,ZB=null;qB.startListening({actionCreator:KB,effect:(e,t)=>{var n=e.payload;if(!(n.touches==null||n.touches.length===0)){ZB=zB(n);var r=t.getState().eventSettings,i=r.throttleDelay,a=r.throttledEvents,o=a===`all`||a.includes(`touchmove`);JB!==null&&(cancelAnimationFrame(JB),JB=null),YB!==null&&(typeof i!=`number`||!o)&&(clearTimeout(YB),YB=null),XB=Array.from(n.touches).map(e=>gB({clientX:e.clientX,clientY:e.clientY,currentTarget:n.currentTarget}));var s=()=>{if(ZB!=null){var e=t.getState(),n=PT(e,e.tooltip.settings.shared);if(n===`axis`){var r=XB?.[0];if(r==null){JB=null,YB=null;return}var i=mB(e,r);i?.activeIndex!=null&&t.dispatch(YT({activeIndex:i.activeIndex,activeDataKey:void 0,activeCoordinate:i.activeCoordinate}))}else if(n===`item`){var a=ZB.touches[0];if(document.elementFromPoint==null||a==null)return;var o=document.elementFromPoint(a.clientX,a.clientY);if(!o||!o.getAttribute)return;var s=o.getAttribute(hd),c=o.getAttribute(`data-recharts-item-id`)??void 0,l=kE(e).find(e=>e.id===c);if(s==null||l==null||c==null)return;var u=l.dataKey,d=GB(e,s,c);t.dispatch(GT({activeDataKey:u,activeIndex:s,activeCoordinate:d,activeGraphicalItemId:c}))}JB=null,YB=null}};if(!o){s();return}i===`raf`?JB=requestAnimationFrame(s):typeof i==`number`&&YB===null&&(s(),ZB=null,YB=setTimeout(()=>{ZB?s():(YB=null,JB=null)},i))}}});var QB={throttleDelay:`raf`,throttledEvents:[`mousemove`,`touchmove`,`pointermove`,`scroll`,`wheel`]},$B=Bl({name:`eventSettings`,initialState:QB,reducers:{setEventSettings:(e,t)=>{t.payload.throttleDelay!=null&&(e.throttleDelay=t.payload.throttleDelay),t.payload.throttledEvents!=null&&(e.throttledEvents=H(t.payload.throttledEvents))}}}),eV=$B.actions.setEventSettings,tV=$B.reducer,nV=Us({brush:CP,cartesianAxis:GN,chartData:DO,errorBars:BI,eventSettings:tV,graphicalItems:LM,layout:Pu,legend:Af,options:bO,polarAxis:fj,polarOptions:jB,referenceElements:MP,renderedTicks:jF,rootProps:DB,tooltip:$T,zIndex:tO}),rV=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`Chart`;return Al({reducer:nV,preloadedState:e,middleware:e=>e({serializableCheck:!1,immutableCheck:![`commonjs`,`es6`,`production`].includes(`es6`)}).concat([vB.middleware,bB.middleware,FB.middleware,VB.middleware,qB.middleware]),enhancers:e=>{var t=e;return typeof e==`function`&&(t=e()),t.concat(Ol({type:`raf`}))},devTools:vp.devToolsEnabled&&{serialize:{replacer:wB},name:`recharts-${t}`}})};function iV(e){var t=e.preloadedState,n=e.children,r=e.reduxStoreName,i=jd(),a=(0,A.useRef)(null);if(i)return n;a.current??=rV(t,r);var o=Xo;return A.createElement(Kf,{context:o,store:a.current},n)}function aV(e){var t=e.layout,n=e.margin,r=z(),i=jd();return(0,A.useEffect)(()=>{i||(r(ju(t)),r(Au(n)))},[r,i,t,n]),null}var oV=(0,A.memo)(aV,Yf);function sV(e){var t=z();return(0,A.useEffect)(()=>{t(OB(e))},[t,e]),null}var cV=(0,A.memo)(e=>{var t=z();return(0,A.useEffect)(()=>{t(eV(e))},[t,e]),null},Yf);function lV(e){var t=e.zIndex,n=e.isPanorama,r=(0,A.useRef)(null),i=z();return(0,A.useLayoutEffect)(()=>(r.current&&i($D({zIndex:t,element:r.current,isPanorama:n})),()=>{i(eO({zIndex:t,isPanorama:n}))}),[i,t,n]),A.createElement(`g`,{tabIndex:-1,ref:r,className:`recharts-zIndex-layer_${t}`})}function uV(e){var t=e.children,n=e.isPanorama,r=B(BD);if(!r||r.length===0)return t;var i=r.filter(e=>e<0),a=r.filter(e=>e>0);return A.createElement(A.Fragment,null,i.map(e=>A.createElement(lV,{key:e,zIndex:e,isPanorama:n})),t,a.map(e=>A.createElement(lV,{key:e,zIndex:e,isPanorama:n})))}var dV=[`children`];function fV(e,t){if(e==null)return{};var n,r,i=pV(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var n=_f(),r=vf(),i=Bp();if(!Iu(n)||!Iu(r))return null;var a=e.children,o=e.otherAttributes,s=e.title,c=e.desc,l,u;return o!=null&&(l=typeof o.tabIndex==`number`?o.tabIndex:i?0:void 0,u=typeof o.role==`string`?o.role:i?`application`:void 0),A.createElement(Vr,mV({},o,{title:s,desc:c,role:u,tabIndex:l,width:n,height:r,style:hV,ref:t}),a)}),_V=e=>{var t=e.children,n=B(Nd);if(!n)return null;var r=n.width,i=n.height,a=n.y,o=n.x;return A.createElement(Vr,{width:r,height:i,x:o,y:a},t)},vV=(0,A.forwardRef)((e,t)=>{var n=e.children,r=fV(e,dV);return jd()?A.createElement(_V,null,A.createElement(uV,{isPanorama:!0},n)):A.createElement(gV,mV({ref:t},r),A.createElement(uV,{isPanorama:!1},n))});function yV(e,t){return wV(e)||CV(e,t)||xV(e,t)||bV()}function bV(){throw TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xV(e,t){if(e){if(typeof e==`string`)return SV(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?SV(e,t):void 0}}function SV(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{if(n!=null){var t=n.getBoundingClientRect().width/n.offsetWidth;W(t)&&t!==i&&e(Nu(t))}},[n,e,i]),r}function EV(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function DV(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=Array(t);n(RO(),null);function zV(e){if(typeof e==`number`)return e;if(typeof e==`string`){var t=parseFloat(e);if(!Number.isNaN(t))return t}return 0}var BV=(0,A.forwardRef)((e,t)=>{var n=(0,A.useRef)(null),r=MV((0,A.useState)({containerWidth:zV(e.style?.width),containerHeight:zV(e.style?.height)}),2),i=r[0],a=r[1],o=(0,A.useCallback)((e,t)=>{a(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]),s=(0,A.useCallback)(e=>{if(typeof t==`function`&&t(e),n.current!=null&&(n.current.disconnect(),n.current=null),e!=null&&typeof ResizeObserver<`u`){var r=e.getBoundingClientRect(),i=r.width,a=r.height;o(i,a);var s=new ResizeObserver(e=>{var t=e[0];if(t!=null){var n=t.contentRect,r=n.width,i=n.height;o(r,i)}});s.observe(e),n.current=s}},[t,o]);return(0,A.useEffect)(()=>()=>{n.current?.disconnect()},[o]),A.createElement(A.Fragment,null,A.createElement(wf,{width:i.containerWidth,height:i.containerHeight}),A.createElement(`div`,jV({ref:s},e)))}),VV=(0,A.forwardRef)((e,t)=>{var n=e.width,r=e.height,i=MV((0,A.useState)({containerWidth:zV(n),containerHeight:zV(r)}),2),a=i[0],o=i[1],s=(0,A.useCallback)((e,t)=>{o(n=>{var r=Math.round(e),i=Math.round(t);return n.containerWidth===r&&n.containerHeight===i?n:{containerWidth:r,containerHeight:i}})},[]),c=(0,A.useCallback)(e=>{if(typeof t==`function`&&t(e),e!=null){var n=e.getBoundingClientRect(),r=n.width,i=n.height;s(r,i)}},[t,s]);return A.createElement(A.Fragment,null,A.createElement(wf,{width:a.containerWidth,height:a.containerHeight}),A.createElement(`div`,jV({ref:c},e)))}),HV=(0,A.forwardRef)((e,t)=>{var n=e.width,r=e.height;return A.createElement(A.Fragment,null,A.createElement(wf,{width:n,height:r}),A.createElement(`div`,jV({ref:t},e)))}),UV=(0,A.forwardRef)((e,t)=>{var n=e.width,r=e.height;return typeof n==`string`||typeof r==`string`?A.createElement(VV,jV({},e,{ref:t})):typeof n==`number`&&typeof r==`number`?A.createElement(HV,jV({},e,{width:n,height:r,ref:t})):A.createElement(A.Fragment,null,A.createElement(wf,{width:n,height:r}),A.createElement(`div`,jV({ref:t},e)))});function WV(e){return e?BV:UV}var GV=(0,A.forwardRef)((e,n)=>{var r=e.children,i=e.className,a=e.height,o=e.onClick,s=e.onContextMenu,c=e.onDoubleClick,l=e.onMouseDown,u=e.onMouseEnter,d=e.onMouseLeave,f=e.onMouseMove,p=e.onMouseUp,m=e.onTouchEnd,h=e.onTouchMove,g=e.onTouchStart,_=e.style,v=e.width,y=e.responsive,b=e.dispatchTouchEvents,x=b===void 0||b,S=(0,A.useRef)(null),C=z(),w=MV((0,A.useState)(null),2),T=w[0],E=w[1],D=MV((0,A.useState)(null),2),O=D[0],k=D[1],j=TV(),M=df(),N=M?.width>0?M.width:v,ee=M?.height>0?M.height:a,te=(0,A.useCallback)(e=>{j(e),typeof n==`function`&&n(e),E(e),k(e),e!=null&&(S.current=e)},[j,n,E,k]),ne=(0,A.useCallback)(e=>{C(_B(e)),C(BB({handler:o,reactEvent:e}))},[C,o]),re=(0,A.useCallback)(e=>{C(yB(e)),C(BB({handler:u,reactEvent:e}))},[C,u]),ie=(0,A.useCallback)(e=>{C(qT()),C(BB({handler:d,reactEvent:e}))},[C,d]),ae=(0,A.useCallback)(e=>{C(yB(e)),C(BB({handler:f,reactEvent:e}))},[C,f]),oe=(0,A.useCallback)(()=>{C(NB())},[C]),se=(0,A.useCallback)(()=>{C(PB())},[C]),ce=(0,A.useCallback)(e=>{C(MB(e.key))},[C]),le=(0,A.useCallback)(e=>{C(BB({handler:s,reactEvent:e}))},[C,s]),ue=(0,A.useCallback)(e=>{C(BB({handler:c,reactEvent:e}))},[C,c]),de=(0,A.useCallback)(e=>{C(BB({handler:l,reactEvent:e}))},[C,l]),fe=(0,A.useCallback)(e=>{C(BB({handler:p,reactEvent:e}))},[C,p]),pe=(0,A.useCallback)(e=>{C(BB({handler:g,reactEvent:e}))},[C,g]),me=(0,A.useCallback)(e=>{x&&C(KB(e)),C(BB({handler:h,reactEvent:e}))},[C,x,h]),he=(0,A.useCallback)(e=>{C(BB({handler:m,reactEvent:e}))},[C,m]),ge=WV(y);return A.createElement(fO.Provider,{value:T},A.createElement(Ci.Provider,{value:O},A.createElement(ge,{width:N??_?.width,height:ee??_?.height,className:t(`recharts-wrapper`,i),style:DV({position:`relative`,cursor:`default`,width:N,height:ee},_),onClick:ne,onContextMenu:le,onDoubleClick:ue,onFocus:oe,onBlur:se,onKeyDown:ce,onMouseDown:de,onMouseEnter:re,onMouseLeave:ie,onMouseMove:ae,onMouseUp:fe,onTouchEnd:he,onTouchMove:me,onTouchStart:pe,ref:te},A.createElement(RV,null),r)))}),KV=[`width`,`height`,`responsive`,`children`,`className`,`style`,`compact`,`title`,`desc`];function qV(e,t){if(e==null)return{};var n,r,i=JV(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r{var n=e.width,r=e.height,i=e.responsive,a=e.children,o=e.className,s=e.style,c=e.compact,l=e.title,u=e.desc,d=Nr(qV(e,KV));return c?A.createElement(A.Fragment,null,A.createElement(wf,{width:n,height:r}),A.createElement(vV,{otherAttributes:d,title:l,desc:u},a)):A.createElement(GV,{className:o,style:s,width:n,height:r,responsive:i??!1,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},A.createElement(vV,{otherAttributes:d,title:l,desc:u,ref:t},A.createElement(BP,null,a)))});function XV(){return XV=Object.assign?Object.assign.bind():function(e){for(var t=1;tA.createElement(rH,{chartName:`LineChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:iH,tooltipPayloadSearcher:vO,categoricalChartProps:e,ref:t})),oH=[`axis`,`item`],sH=(0,A.forwardRef)((e,t)=>A.createElement(rH,{chartName:`BarChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:oH,tooltipPayloadSearcher:vO,categoricalChartProps:e,ref:t}));function cH(e){var t=z();return(0,A.useEffect)(()=>{t(AB(e))},[t,e]),null}var lH=[`layout`];function uH(){return uH=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var n=Na(e,EH);return A.createElement(yH,{chartName:`PieChart`,defaultTooltipEventType:`item`,validateTooltipEventTypes:TH,tooltipPayloadSearcher:vO,categoricalChartProps:n,ref:t})}),OH=[`axis`],kH=(0,A.forwardRef)((e,t)=>A.createElement(rH,{chartName:`AreaChart`,defaultTooltipEventType:`axis`,validateTooltipEventTypes:OH,tooltipPayloadSearcher:vO,categoricalChartProps:e,ref:t})),AH=[0,1];function jH({data:e}){return(0,P.jsx)(PH,{title:`Success rate`,children:e.length===0?(0,P.jsx)(FH,{children:`Success data will appear after the first completed sample.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{className:`chart-summary`,children:[`Success ranged from `,f(Math.min(...e.map(e=>e.success_rate))),` to `,f(Math.max(...e.map(e=>e.success_rate))),` across `,e.length,` time buckets.`]}),(0,P.jsx)(`div`,{className:`chart-frame`,role:`img`,"aria-label":`Success rate over time, scaled from zero to one hundred percent`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(aH,{data:e,accessibilityLayer:!0,children:[(0,P.jsx)(TI,{stroke:`var(--border)`,vertical:!1}),(0,P.jsx)(Qz,{dataKey:`at`,tickFormatter:RH,minTickGap:28}),(0,P.jsx)(pB,{domain:AH,ticks:[0,.25,.5,.75,1],tickFormatter:e=>f(e),width:54}),(0,P.jsx)(tk,{content:(0,P.jsx)(IH,{valueFormatter:e=>f(e)})}),(0,P.jsx)(kL,{type:`monotone`,dataKey:`success_rate`,name:`Success rate`,stroke:`var(--primary)`,strokeWidth:2,dot:!1,isAnimationActive:!1})]})})}),(0,P.jsx)(LH,{caption:`Success-rate chart data`,data:e,columns:[[`Success rate`,e=>f(e.success_rate)]]})]})})}function MH({data:e}){let t=e.filter(e=>e.success_rate>0);return(0,P.jsx)(PH,{title:`Latency`,children:t.length===0?(0,P.jsx)(FH,{children:`Latency data will appear after a successful probe.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{className:`chart-summary`,children:[`Latest median latency was `,u(t.at(-1)?.latency_p50_ms),`; latest p95 was `,u(t.at(-1)?.latency_p95_ms),`.`]}),(0,P.jsx)(`div`,{className:`chart-frame`,role:`img`,"aria-label":`Median and p95 latency in milliseconds over time`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(aH,{data:t,accessibilityLayer:!0,children:[(0,P.jsx)(TI,{stroke:`var(--border)`,vertical:!1}),(0,P.jsx)(Qz,{dataKey:`at`,tickFormatter:RH,minTickGap:28}),(0,P.jsx)(pB,{domain:[0,`auto`],tickFormatter:e=>`${e} ms`,width:62}),(0,P.jsx)(tk,{content:(0,P.jsx)(IH,{valueFormatter:e=>u(e)})}),(0,P.jsx)(kL,{type:`monotone`,dataKey:`latency_p50_ms`,name:`p50`,stroke:`var(--chart-residential)`,strokeWidth:2,dot:!1,isAnimationActive:!1}),(0,P.jsx)(kL,{type:`monotone`,dataKey:`latency_p95_ms`,name:`p95`,stroke:`var(--chart-datacenter)`,strokeWidth:2,strokeDasharray:`5 4`,dot:!1,isAnimationActive:!1})]})})}),(0,P.jsx)(LH,{caption:`Latency chart data`,data:t,columns:[[`p50`,e=>u(e.latency_p50_ms)],[`p95`,e=>u(e.latency_p95_ms)]]})]})})}function NH({data:e}){return(0,P.jsx)(PH,{title:`Pool growth`,children:e.length===0?(0,P.jsx)(FH,{children:`Pool growth appears after an egress IP is observed.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsxs)(`p`,{className:`chart-summary`,children:[`The observed pool grew to `,e.at(-1)?.distinct_ips??0,` distinct IPs across `,e.length,` time buckets.`]}),(0,P.jsx)(`div`,{className:`chart-frame`,role:`img`,"aria-label":`Cumulative distinct egress IPs over time`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(aH,{data:e,accessibilityLayer:!0,children:[(0,P.jsx)(TI,{stroke:`var(--border)`,vertical:!1}),(0,P.jsx)(Qz,{dataKey:`at`,tickFormatter:RH,minTickGap:28}),(0,P.jsx)(pB,{domain:[0,`dataMax`],allowDecimals:!1,width:42}),(0,P.jsx)(tk,{content:(0,P.jsx)(IH,{valueFormatter:e=>new Intl.NumberFormat().format(e)})}),(0,P.jsx)(kL,{type:`stepAfter`,dataKey:`distinct_ips`,name:`Distinct IPs`,stroke:`var(--primary)`,strokeWidth:2,dot:!1,isAnimationActive:!1})]})})}),(0,P.jsxs)(`details`,{className:`chart-data`,children:[(0,P.jsx)(`summary`,{children:`View pool-growth data`}),(0,P.jsx)(`div`,{className:`chart-data-scroll`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`caption`,{className:`sr-only`,children:`Pool-growth chart data`}),(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`col`,children:`Time`}),(0,P.jsx)(`th`,{scope:`col`,children:`Distinct IPs`})]})}),(0,P.jsx)(`tbody`,{children:e.map(e=>(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`td`,{children:v(e.at)}),(0,P.jsx)(`td`,{children:e.distinct_ips})]},e.at))})]})})]})]})})}function PH({title:e,children:t}){return(0,P.jsxs)(`section`,{className:`report-section`,children:[(0,P.jsx)(`h2`,{children:e}),t]})}function FH({children:e}){return(0,P.jsx)(`p`,{className:`section-empty`,children:e})}function IH({active:e,label:t,payload:n,valueFormatter:r}){return!e||!n?.length?null:(0,P.jsxs)(`div`,{className:`chart-tooltip`,children:[(0,P.jsx)(`strong`,{children:v(String(t))}),n.map(e=>(0,P.jsxs)(`span`,{style:{color:e.color},children:[e.name,`: `,r(Number(e.value))]},e.name))]})}function LH({data:e,caption:t,columns:n}){return(0,P.jsxs)(`details`,{className:`chart-data`,children:[(0,P.jsx)(`summary`,{children:`View chart data`}),(0,P.jsx)(`div`,{className:`chart-data-scroll`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`caption`,{className:`sr-only`,children:t}),(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`col`,children:`Time`}),n.map(([e])=>(0,P.jsx)(`th`,{scope:`col`,children:e},e))]})}),(0,P.jsx)(`tbody`,{children:e.map(e=>(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`td`,{children:v(e.at)}),n.map(([t,n])=>(0,P.jsx)(`td`,{children:n(e)},t))]},e.at))})]})})]})}function RH(e){let t=new Date(e);return Number.isNaN(t.getTime())?`—`:new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`}).format(t)}var zH=[{key:`mobile`,label:`Mobile`,color:`var(--chart-mobile)`},{key:`residential`,label:`Residential`,color:`var(--chart-residential)`},{key:`datacenter`,label:`Datacenter`,color:`var(--chart-datacenter)`},{key:`unknown`,label:`Unknown`,color:`var(--chart-unknown)`}];function BH({data:e}){return(0,P.jsx)(PH,{title:`Composition over time`,children:e.length===0?(0,P.jsx)(FH,{children:`Composition appears once an egress IP is classified.`}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`p`,{className:`chart-summary`,children:`Each time bucket is stacked by mobile, residential, datacenter, and unknown IP observations.`}),(0,P.jsx)(`div`,{className:`chart-frame`,role:`img`,"aria-label":`Stacked IP-category composition over time`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(kH,{data:e,accessibilityLayer:!0,children:[(0,P.jsx)(TI,{stroke:`var(--border)`,vertical:!1}),(0,P.jsx)(Qz,{dataKey:`at`,tickFormatter:WH,minTickGap:28}),(0,P.jsx)(pB,{domain:[0,`auto`],allowDecimals:!1,width:42}),(0,P.jsx)(tk,{content:(0,P.jsx)(HH,{})}),zH.map(e=>(0,P.jsx)(SR,{type:`monotone`,dataKey:e.key,name:e.label,stackId:`composition`,stroke:e.color,fill:e.color,fillOpacity:.55,isAnimationActive:!1},e.key))]})})}),(0,P.jsxs)(`details`,{className:`chart-data`,children:[(0,P.jsx)(`summary`,{children:`View composition data`}),(0,P.jsx)(`div`,{className:`chart-data-scroll`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`caption`,{className:`sr-only`,children:`Composition chart data`}),(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`col`,children:`Time`}),zH.map(e=>(0,P.jsx)(`th`,{scope:`col`,children:e.label},e.key))]})}),(0,P.jsx)(`tbody`,{children:e.map(e=>(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`td`,{children:v(e.at)}),zH.map(t=>(0,P.jsx)(`td`,{children:e[t.key]},t.key))]},e.at))})]})})]})]})})}function VH({data:e}){let t=zH.map(t=>({...t,value:e[t.key]})),n=t.reduce((e,t)=>e+t.value,0);return(0,P.jsx)(PH,{title:`Pool composition`,children:n===0?(0,P.jsx)(FH,{children:`Pool composition appears once an egress IP is classified.`}):(0,P.jsxs)(`div`,{className:`donut-layout`,children:[(0,P.jsx)(`div`,{className:`donut-chart`,role:`img`,"aria-label":`Pool composition across ${n} classified IPs`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(DH,{accessibilityLayer:!0,children:[(0,P.jsx)(_N,{data:t,dataKey:`value`,nameKey:`label`,innerRadius:`55%`,outerRadius:`82%`,paddingAngle:1,isAnimationActive:!1,children:t.map(e=>(0,P.jsx)(nk,{fill:e.color},e.key))}),(0,P.jsx)(tk,{content:(0,P.jsx)(UH,{})})]})})}),(0,P.jsx)(`dl`,{className:`composition-legend`,children:t.map(e=>(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`dt`,{children:[(0,P.jsx)(`span`,{className:`legend-swatch`,style:{background:e.color}}),e.label]}),(0,P.jsx)(`dd`,{className:`numeric`,children:e.value})]},e.key))})]})})}function HH({active:e,label:t,payload:n}){return!e||!n?.length?null:(0,P.jsxs)(`div`,{className:`chart-tooltip`,children:[(0,P.jsx)(`strong`,{children:v(t)}),n.map(e=>(0,P.jsxs)(`span`,{style:{color:e.color},children:[e.name,`: `,e.value]},e.name))]})}function UH({active:e,payload:t}){if(!e||!t?.length)return null;let n=t[0];return(0,P.jsxs)(`div`,{className:`chart-tooltip`,children:[(0,P.jsx)(`strong`,{children:n.payload?.label??n.name}),(0,P.jsxs)(`span`,{children:[n.value??0,` IPs`]})]})}function WH(e){let t=new Date(e);return Number.isNaN(t.getTime())?`—`:new Intl.DateTimeFormat(void 0,{hour:`numeric`,minute:`2-digit`}).format(t)}function GH({data:e}){let t=e.reduce((e,t)=>e+t.count,0);if(t===0)return(0,P.jsx)(PH,{title:`Risk distribution`,children:(0,P.jsx)(FH,{children:`Risk distribution appears after reputation enrichment.`})});let n=e.map(e=>({...e,midpoint:(e.min+e.max)/2}));return(0,P.jsxs)(PH,{title:`Risk distribution`,children:[(0,P.jsxs)(`p`,{className:`chart-summary`,children:[t,` enriched IPs are grouped by risk score. Scores at or above 70 cross the flagged threshold.`]}),(0,P.jsx)(`div`,{className:`chart-frame`,role:`img`,"aria-label":`IP risk-score histogram with the flag threshold marked at 70`,children:(0,P.jsx)(pf,{width:`100%`,height:240,children:(0,P.jsxs)(sH,{data:n,accessibilityLayer:!0,children:[(0,P.jsx)(TI,{stroke:`var(--border)`,vertical:!1}),(0,P.jsx)(Qz,{type:`number`,dataKey:`midpoint`,domain:[0,100],ticks:[0,10,20,30,40,50,60,70,80,90,100],allowDataOverflow:!0}),(0,P.jsx)(pB,{domain:[0,`dataMax`],allowDecimals:!1,width:42}),(0,P.jsx)(tk,{content:(0,P.jsx)(KH,{})}),(0,P.jsx)(rF,{x:70,stroke:`var(--danger)`,strokeDasharray:`4 3`,label:{value:`≥70`,fill:`var(--danger)`,position:`top`}}),(0,P.jsx)(jz,{dataKey:`count`,name:`IPs`,fill:`var(--chart-datacenter)`,isAnimationActive:!1})]})})}),(0,P.jsxs)(`details`,{className:`chart-data`,children:[(0,P.jsx)(`summary`,{children:`View risk data`}),(0,P.jsx)(`div`,{className:`chart-data-scroll`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`caption`,{className:`sr-only`,children:`Risk-score histogram data`}),(0,P.jsx)(`thead`,{children:(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`th`,{scope:`col`,children:`Risk range`}),(0,P.jsx)(`th`,{scope:`col`,children:`Minimum`}),(0,P.jsx)(`th`,{scope:`col`,children:`Maximum`}),(0,P.jsx)(`th`,{scope:`col`,children:`IPs`})]})}),(0,P.jsx)(`tbody`,{children:e.map(e=>(0,P.jsxs)(`tr`,{children:[(0,P.jsx)(`td`,{children:e.label}),(0,P.jsx)(`td`,{children:e.min}),(0,P.jsx)(`td`,{children:e.max}),(0,P.jsx)(`td`,{children:e.count})]},`${e.min}-${e.max}`))})]})})]})]})}function KH({active:e,payload:t}){let n=t?.[0]?.payload;return!e||!n?null:(0,P.jsxs)(`div`,{className:`chart-tooltip`,children:[(0,P.jsxs)(`strong`,{children:[`Risk `,n.label]}),(0,P.jsxs)(`span`,{children:[n.count,` IPs`]})]})}var qH=100;function JH(e,t){let n=Array.from(e);return n.length<=t?e:n.slice(0,t).join(``)}function YH({value:e,label:t,onSave:n,pending:r}){let[i,a]=(0,A.useState)(!1),[o,s]=(0,A.useState)(e),c=(0,A.useRef)(null),l=(0,A.useRef)(!1);(0,A.useEffect)(()=>{i&&(c.current?.focus(),c.current?.select())},[i]);let u=()=>{s(e),a(!0)},d=async()=>{if(l.current)return;let t=o.trim();if(t===``||t===e){a(!1);return}l.current=!0;try{await n(t),a(!1)}catch{}finally{l.current=!1}};return i?(0,P.jsx)(`h1`,{className:`editable-title`,children:(0,P.jsx)(g,{ref:c,className:`editable-title-input`,"aria-label":t,value:o,disabled:r,onChange:e=>s(JH(e.target.value,qH)),onKeyDown:e=>{if(e.key===`Enter`){e.preventDefault(),d();return}e.key===`Escape`&&(e.preventDefault(),a(!1))},onBlur:()=>void d()})}):(0,P.jsx)(`h1`,{className:`editable-title`,children:(0,P.jsxs)(`button`,{type:`button`,className:`editable-title-trigger`,"aria-label":`Rename ${t}`,onClick:u,children:[(0,P.jsx)(`span`,{children:e}),(0,P.jsx)(O,{className:`editable-title-icon`,size:16,"aria-hidden":`true`})]})})}export{PH as a,NH as c,k as d,E as f,VH as i,jH as l,GH as n,FH as o,T as p,BH as r,MH as s,YH as t,Sr as u}; \ No newline at end of file diff --git a/web/dist/assets/index-D1Rlp_NN.js b/web/dist/assets/index-D1Rlp_NN.js new file mode 100644 index 0000000..ceb5e34 --- /dev/null +++ b/web/dist/assets/index-D1Rlp_NN.js @@ -0,0 +1,115 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-page-CGm4hCuY.js","assets/editable-title-D53k_ibM.js","assets/run-page-BJ8sMY08.js"])))=>i.map(i=>d[i]); +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(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 u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var ee=Array.isArray;function S(){}var C={H:null,A:null,T:null,S:null},w=Object.prototype.hasOwnProperty;function te(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ne(e,t){return te(e.type,t,e.props)}function T(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function re(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ie=/\/+/g;function ae(e,t){return typeof e==`object`&&e&&e.key!=null?re(``+e.key):t.toString(36)}function oe(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(S,S):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function se(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,se(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ae(e,0):a,ee(o)?(i=``,c!=null&&(i=c.replace(ie,`$&/`)+`/`),se(o,r,i,``,function(e){return e})):o!=null&&(T(o)&&(o=ne(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ie,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(ee(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,ee||(ee=!0,T());else{var t=n(l);t!==null&&ae(x,t.startTime-e)}}var ee=!1,S=-1,C=5,w=-1;function te(){return g?!0:!(e.unstable_now()-wt&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ae(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?T():ee=!1}}}var T;if(typeof y==`function`)T=function(){y(ne)};else if(typeof MessageChannel<`u`){var re=new MessageChannel,ie=re.port2;re.port1.onmessage=ne,T=function(){ie.postMessage(null)}}else T=function(){_(ne,0)};function ae(t,n){S=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(S),S=-1):h=!0,ae(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ee||(ee=!0,T()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1fe||(e.current=de[fe],de[fe]=null,fe--)}function A(e,t){fe++,de[fe]=e.current,e.current=t}var pe=O(null),j=O(null),me=O(null),he=O(null);function ge(e,t){switch(A(me,t),A(j,e),A(pe,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}k(pe),A(pe,e)}function _e(){k(pe),k(j),k(me)}function ve(e){e.memoizedState!==null&&A(he,e);var t=pe.current,n=Hd(t,e.type);t!==n&&(A(j,e),A(pe,n))}function ye(e){j.current===e&&(k(pe),k(j)),he.current===e&&(k(he),Qf._currentValue=ue)}var be,xe;function Se(e){if(be===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);be=t&&t[1]||``,xe=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Ce=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Se(n):``}function Te(e,t){switch(e.tag){case 26:case 27:case 5:return Se(e.type);case 16:return Se(`Lazy`);case 13:return e.child!==t&&t!==null?Se(`Suspense Fallback`):Se(`Suspense`);case 19:return Se(`SuspenseList`);case 0:case 15:return we(e.type,!1);case 11:return we(e.type.render,!1);case 1:return we(e.type,!0);case 31:return Se(`Activity`);default:return``}}function Ee(e){try{var t=``,n=null;do t+=Te(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var De=Object.prototype.hasOwnProperty,Oe=t.unstable_scheduleCallback,ke=t.unstable_cancelCallback,Ae=t.unstable_shouldYield,je=t.unstable_requestPaint,Me=t.unstable_now,Ne=t.unstable_getCurrentPriorityLevel,Pe=t.unstable_ImmediatePriority,Fe=t.unstable_UserBlockingPriority,Ie=t.unstable_NormalPriority,Le=t.unstable_LowPriority,Re=t.unstable_IdlePriority,ze=t.log,Be=t.unstable_setDisableYieldValue,Ve=null,He=null;function Ue(e){if(typeof ze==`function`&&Be(e),He&&typeof He.setStrictMode==`function`)try{He.setStrictMode(Ve,e)}catch{}}var We=Math.clz32?Math.clz32:qe,Ge=Math.log,Ke=Math.LN2;function qe(e){return e>>>=0,e===0?32:31-(Ge(e)/Ke|0)|0}var Je=256,Ye=262144,Xe=4194304;function M(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function N(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=M(n))):i=M(o):i=M(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=M(n))):i=M(o)):i=M(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Ze(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Qe(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function $e(){var e=Xe;return Xe<<=1,!(Xe&62914560)&&(Xe=4194304),e}function et(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function tt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function nt(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),mn=!1;if(pn)try{var hn={};Object.defineProperty(hn,"passive",{get:function(){mn=!0}}),window.addEventListener(`test`,hn,hn),window.removeEventListener(`test`,hn,hn)}catch{mn=!1}var gn=null,_n=null,vn=null;function yn(){if(vn)return vn;var e,t=_n,n=t.length,r,i=`value`in gn?gn.value:gn.textContent,a=i.length;for(e=0;e=Zn),er=` `,tr=!1;function nr(e,t){switch(e){case`keyup`:return Yn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function rr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ir=!1;function ar(e,t){switch(e){case`compositionend`:return rr(t);case`keypress`:return t.which===32?(tr=!0,er):null;case`textInput`:return e=t.data,e===er&&tr?null:e;default:return null}}function or(e,t){if(ir)return e===`compositionend`||!Xn&&nr(e,t)?(e=yn(),vn=_n=gn=null,ir=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Or(n)}}function Ar(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ar(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function jr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Bt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Bt(e.document)}return t}function Mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Nr=pn&&`documentMode`in document&&11>=document.documentMode,Pr=null,Fr=null,Ir=null,Lr=!1;function Rr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Lr||Pr==null||Pr!==Bt(r)||(r=Pr,`selectionStart`in r&&Mr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Ir&&Dr(Ir,r)||(Ir=r,r=Td(Fr,`onSelect`),0>=o,i-=o,Ai=1<<32-We(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),F&&Mi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),F&&Mi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return F&&Mi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),F&&Mi(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===T&&Ma(l)===r.type){n(e,r.sibling),c=a(r,o.props),za(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=_i(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=gi(o.type,o.key,o.props,null,e.mode,c),za(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=bi(o,e.mode,c),c.return=e,e=c}return s(e);case T:return o=Ma(o),b(e,r,o,c)}if(le(o))return h(e,r,o,c);if(oe(o)){if(l=oe(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Ra(o),c);if(o.$$typeof===S)return b(e,r,oa(e,o),c);Ba(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=vi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{La=0;var i=b(e,t,n,r);return Ia=null,i}catch(t){if(t===Ea||t===Oa)throw t;var a=fi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ha=Va(!0),Ua=Va(!1),Wa=!1;function Ga(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ka(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function qa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ja(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,q&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=li(e),ci(e,null,n),t}return ai(e,r,t,n),li(e)}function Ya(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,it(e,n)}}function Xa(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Za=!1;function Qa(){if(Za){var e=_a;if(e!==null)throw e}}function $a(e,t,n,r){Za=!1;var i=e.updateQueue;Wa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(X&f)===f:(r&f)===f){f!==0&&f===ga&&(Za=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Wa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Wl|=o,e.lanes=o,e.memoizedState=d}}function eo(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function to(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=E.T,s={};E.T=s,Ps(e,!1,t,n);try{var c=i(),l=E.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,ba(c,r),fu(e)):Ns(e,t,r,fu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},fu())}finally{D.p=a,o!==null&&s.types!==null&&(o.types=s.types),E.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,ue,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ue,baseState:ue,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zo,lastRenderedState:ue},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:zo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},fu())}function Ds(){return aa(Qf)}function Os(){return Po().memoizedState}function ks(){return Po().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=fu();e=qa(n);var r=Ja(t,e,n);r!==null&&(mu(r,t,n),Ya(r,t,n)),t={cache:fa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=fu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=oi(e,t,n,r),n!==null&&(mu(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,fu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Er(s,o))return ai(e,t,i,0),J===null&&ii(),!1}catch{}if(n=oi(e,t,i,r),n!==null)return mu(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:ud(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=oi(e,n,r,2),t!==null&&mu(t,e,2)}function Fs(e){var t=e.alternate;return e===L||t!==null&&t===L}function Is(e,t){bo=yo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,it(e,n)}}var Rs={readContext:aa,use:Lo,useCallback:To,useContext:To,useEffect:To,useImperativeHandle:To,useLayoutEffect:To,useInsertionEffect:To,useMemo:To,useReducer:To,useRef:To,useState:To,useDebugValue:To,useDeferredValue:To,useTransition:To,useSyncExternalStore:To,useId:To,useHostTransitionStatus:To,useFormState:To,useActionState:To,useOptimistic:To,useMemoCache:To,useCacheRefresh:To};Rs.useEffectEvent=To;var zs={readContext:aa,use:Lo,useCallback:function(e,t){return No().memoizedState=[e,t===void 0?null:t],e},useContext:aa,useEffect:V,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),us(4194308,4,U.bind(null,t,e),n)},useLayoutEffect:function(e,t){return us(4194308,4,e,t)},useInsertionEffect:function(e,t){us(4,2,e,t)},useMemo:function(e,t){var n=No();t=t===void 0?null:t;var r=e();if(R){Ue(!0);try{e()}finally{Ue(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=No();if(n!==void 0){var i=n(t);if(R){Ue(!0);try{n(t)}finally{Ue(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=js.bind(null,L,e),[r.memoizedState,e]},useRef:function(e){var t=No();return e={current:e},t.memoizedState=e},useState:function(e){e=Yo(e);var t=e.queue,n=Ms.bind(null,L,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(No(),e,t)},useTransition:function(){var e=Yo(!1);return e=Ss.bind(null,L,e.queue,!0,!1),No().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=L,a=No();if(F){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),J===null)throw Error(i(349));X&127||Wo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,V(Ko.bind(null,r,o,e),[e]),r.flags|=2048,cs(9,{destroy:void 0},Go.bind(null,r,o,n,t),null),n},useId:function(){var e=No(),t=J.identifierPrefix;if(F){var n=ji,r=Ai;n=(r&~(1<<32-We(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=xo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[dt]=t,o[ft]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=me.current,Gi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Li,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[dt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||jd(e.nodeValue,n)),e||Hi(t,!0)}else e=Bd(e).createTextNode(r),e[dt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Gi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[dt]=t}else Ki(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(po(t),t):(po(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Gi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[dt]=t}else Ki(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(po(t),t):(po(t),null)}return po(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ic(t,t.updateQueue),Rc(t),null);case 4:return _e(),e===null&&xd(t.stateNode.containerInfo),Rc(t),null;case 10:return $i(t.type),Rc(t),null;case 19:if(k(mo),r=t.memoizedState,r===null)return Rc(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)Lc(r,!1);else{if(Ul!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=ho(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)hi(n,e),n=n.sibling;return A(mo,mo.current&1|2),F&&Mi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Me()>eu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}else{if(!a)if(e=ho(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!F)return Rc(t),null}else 2*Me()-r.renderingStartTime>eu&&n!==536870912&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Me(),e.sibling=null,n=mo.current,A(mo,a?n&1|2:n&1),F&&Mi(t,r.treeForkCount),e);case 22:case 23:return po(t),oo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&k(Sa),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),$i(da),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Fi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return $i(da),_e(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ye(t),null;case 31:if(t.memoizedState!==null){if(po(t),t.alternate===null)throw Error(i(340));Ki()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(po(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Ki()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return k(mo),null;case 4:return _e(),null;case 10:return $i(t.type),null;case 22:case 23:return po(t),oo(),e!==null&&k(Sa),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return $i(da),null;case 25:return null;default:return null}}function Vc(e,t){switch(Fi(t),t.tag){case 3:$i(da),_e();break;case 26:case 27:case 5:ye(t);break;case 4:_e();break;case 31:t.memoizedState!==null&&po(t);break;case 13:po(t);break;case 19:k(mo);break;case 10:$i(t.type);break;case 22:case 23:po(t),oo(),e!==null&&k(Sa);break;case 24:$i(da)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Q(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Q(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Q(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{to(t,n)}catch(t){Q(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Q(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Q(e,t,n)}}function W(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Q(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Q(e,t,n)}else n.current=null}function qc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Q(e,e.return,t)}}function Jc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[ft]=t}catch(t){Q(e,e.return,t)}}function Yc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Xc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Yc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Zc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=rn));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Zc(e,t,n),e=e.sibling;e!==null;)Zc(e,t,n),e=e.sibling}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[dt]=e,t[ft]=n}catch(t){Q(e,e.return,t)}}var el=!1,tl=!1,nl=!1,G=typeof WeakSet==`function`?WeakSet:Set,rl=null;function il(e,t){if(e=e.containerInfo,Rd=sp,e=jr(e),Mr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,rl=t;rl!==null;)if(t=rl,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,rl=e;else for(;rl!==null;){switch(t=rl,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[dt]=e,wt(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=kr(s,h),v=kr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,E.T=null,n=cu,cu=null;var o=iu,s=ou;if(ru=0,au=iu=null,ou=0,q&6)throw Error(i(331));var c=q;if(q|=4,Nl(o.current),Tl(o,o.current,s,n),q=c,rd(0,!1),He&&typeof He.onPostCommitFiberRoot==`function`)try{He.onPostCommitFiberRoot(Ve,o)}catch{}return!0}finally{D.p=a,E.T=r,Bu(e,t)}}function Uu(e,t,n){t=Si(n,t),t=Qs(e.stateNode,t,2),e=Ja(e,t,2),e!==null&&(tt(e,2),nd(e))}function Q(e,t,n){if(e.tag===3)Uu(e,e,n);else for(;t!==null;){if(t.tag===3){Uu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(nu===null||!nu.has(r))){e=Si(n,e),n=$s(2),r=Ja(t,n,2),r!==null&&(ec(n,r,t,e),tt(r,2),nd(r));break}}t=t.return}}function Wu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Ll;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Vl=!0,i.add(n),e=Gu.bind(null,e,t,n),t.then(e,e))}function Gu(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,J===e&&(X&n)===n&&(Ul===4||Ul===3&&(X&62914560)===X&&300>Me()-Ql?!(q&2)&&xu(e,0):Kl|=n,Jl===X&&(Jl=0)),nd(e)}function Ku(e,t){t===0&&(t=$e()),e=si(e,t),e!==null&&(tt(e,t),nd(e))}function qu(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Ku(e,n)}function Ju(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),Ku(e,n)}function Yu(e,t){return Oe(e,t)}var Xu=null,Zu=null,Qu=!1,$u=!1,ed=!1,td=0;function nd(e){e!==Zu&&e.next===null&&(Zu===null?Xu=Zu=e:Zu=Zu.next=e),$u=!0,Qu||(Qu=!0,ld())}function rd(e,t){if(!ed&&$u){ed=!0;do for(var n=!1,r=Xu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-We(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,cd(r,a))}else a=X,a=N(r,r===J?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Ze(r,a)||(n=!0,cd(r,a));r=r.next}while(n);ed=!1}}function id(){ad()}function ad(){$u=Qu=!1;var e=0;td!==0&&Gd()&&(e=td);for(var t=Me(),n=null,r=Xu;r!==null;){var i=r.next,a=od(r,t);a===0?(r.next=null,n===null?Xu=i:n.next=i,i===null&&(Zu=n)):(n=r,(e!==0||a&3)&&($u=!0)),r=i}ru!==0&&ru!==5||rd(e,!1),td!==0&&(td=0)}function od(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Ht(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),wt(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ht(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ht(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ht(n.imageSizes)+`"]`)):i+=`[href="`+Ht(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),wt(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ht(r)+`"][href="`+Ht(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),wt(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=Ct(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);wt(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=Ct(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),wt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=Ct(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),wt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=me.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=Ct(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=Ct(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=Ct(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Ht(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),wt(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Ht(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ht(n.href)+`"]`);if(r)return t.instance=r,wt(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),wt(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,wt(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),wt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,wt(a),a):(r=n,(a=mf.get(o))&&(r=m({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),wt(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,wt(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),wt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},y=new class extends v{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},b={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},x=new class{#e=b;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function ee(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function te(e){return typeof e==`number`&&e>=0&&e!==1/0}function ne(e,t){return Math.max(e+(t||0)-Date.now(),0)}function T(e,t){return typeof e==`function`?e(t):e}function re(e,t){return typeof e==`function`?e(t):e}function ie(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==oe(o,t.options))return!1}else if(!ce(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ae(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(se(t.options.mutationKey)!==se(a))return!1}else if(!ce(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function oe(e,t){return(t?.queryKeyHashFn||se)(e)}function se(e){return JSON.stringify(e,(e,t)=>de(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function ce(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e==`object`&&typeof t==`object`){if(Array.isArray(e)&&Array.isArray(t)){for(let n=0;n500)return t;let r=ue(e)&&ue(t);if(!r&&!(de(e)&&de(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{x.setTimeout(t,e)})}function k(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:E(e,t)}function A(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function pe(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var j=Symbol();function me(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===j?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function he(e,t){return typeof e==`function`?e(...t):!!e}function ge(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var _e=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function ve(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var ye=ee;function be(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=ye,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var xe=be(),Se=new class extends v{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function Ce(e){return Math.min(1e3*2**e,3e4)}function we(e){return(e??`online`)!==`online`||Se.isOnline()}var Te=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function Ee(e){let t=!1,n=0,r,i=ve(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new Te(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>y.isFocused()&&(e.networkMode===`always`||Se.isOnline())&&e.canRun(),u=()=>we(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(_e.isServer()?0:3),o=e.retryDelay??Ce,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var De=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),te(this.gcTime)&&(this.#e=x.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(_e.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e!==void 0&&(x.clearTimeout(this.#e),this.#e=void 0)}};function Oe(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ge(e,()=>t.signal,()=>n=!0)},u=me(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?pe:A;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?Ae:ke,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:ke(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function ke(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Ae(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var je=class extends De{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Pe(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Pe(this.options);e.data!==void 0&&(this.setState(Ne(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=k(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>re(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===j||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>T(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!ne(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=me(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?Oe(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=Ee({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof Te&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof Te){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...Me(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Ne(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),xe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function Me(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:we(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Ne(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Pe(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var Fe=class extends v{constructor(e,t){super(),this.options=t,this.#e=e,this.#s=null,this.#o=ve(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#i;#a;#o;#s;#c;#l;#u;#d;#f;#p;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),Le(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Re(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Re(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){let t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!=`boolean`&&typeof this.options.enabled!=`function`&&typeof re(this.options.enabled,this.#t)!=`boolean`)throw Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#S(),this.#t.setOptions(this.options),t._defaulted&&!D(this.options,t)&&this.#e.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#t,observer:this});let r=this.hasListeners();r&&ze(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||T(this.options.staleTime,this.#t)!==T(t.staleTime,this.#t))&&this.#g();let i=this.#_();r&&(this.#t!==n||re(this.options.enabled,this.#t)!==re(t.enabled,this.#t)||i!==this.#p)&&this.#v(i)}getOptimisticResult(e){let t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Ve(this,n)&&(this.#r=n,this.#a=this.options,this.#i=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(e,n)=>(this.trackProp(n),t?.(n),n===`promise`&&(this.trackProp(`data`),!this.options.experimental_prefetchInRender&&this.#o.status===`pending`&&this.#o.reject(Error(`experimental_prefetchInRender feature flag is not enabled`))),Reflect.get(e,n))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#S();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(C)),t}#g(){this.#b();let e=T(this.options.staleTime,this.#t);if(_e.isServer()||this.#r.isStale||!te(e))return;let t=ne(this.#r.dataUpdatedAt,e)+1;this.#d=x.setTimeout(()=>{this.#r.isStale||this.updateResult()},t)}#_(){return(typeof this.options.refetchInterval==`function`?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#v(e){this.#x(),this.#p=e,!(_e.isServer()||re(this.options.enabled,this.#t)===!1||!te(this.#p)||this.#p===0)&&(this.#f=x.setInterval(()=>{(this.options.refetchIntervalInBackground||y.isFocused())&&this.#h()},this.#p))}#y(){this.#g(),this.#v(this.#_())}#b(){this.#d!==void 0&&(x.clearTimeout(this.#d),this.#d=void 0)}#x(){this.#f!==void 0&&(x.clearInterval(this.#f),this.#f=void 0)}createResult(e,t){let n=this.#t,r=this.options,i=this.#r,a=this.#i,o=this.#a,s=e===n?this.#n:e.state,{state:c}=e,l={...c},u=!1,d;if(t._optimisticResults){let i=this.hasListeners(),a=!i&&Le(e,t),o=i&&ze(e,n,t,r);(a||o)&&(l={...l,...Me(c.data,e.options)}),t._optimisticResults===`isRestoring`&&(l.fetchStatus=`idle`)}let{error:f,errorUpdatedAt:p,status:m}=l;d=l.data;let h=!1;if(t.placeholderData!==void 0&&d===void 0&&m===`pending`){let e;i?.isPlaceholderData&&t.placeholderData===o?.placeholderData?(e=i.data,h=!0):e=typeof t.placeholderData==`function`?t.placeholderData(this.#u?.state.data,this.#u):t.placeholderData,e!==void 0&&(m=`success`,d=k(i?.data,e,t),u=!0)}if(t.select&&d!==void 0&&!h)if(i&&d===a?.data&&t.select===this.#c)d=this.#l;else try{this.#c=t.select,d=t.select(d),d=k(i?.data,d,t),this.#l=d,this.#s=null}catch(e){this.#s=e}this.#s&&(f=this.#s,d=this.#l,p=Date.now(),m=`error`);let g=l.fetchStatus===`fetching`,_=m===`pending`,v=m===`error`,y=_&&g,b=d!==void 0,x={status:m,fetchStatus:l.fetchStatus,isPending:_,isSuccess:m===`success`,isError:v,isInitialLoading:y,isLoading:y,data:d,dataUpdatedAt:l.dataUpdatedAt,error:f,errorUpdatedAt:p,failureCount:l.fetchFailureCount,failureReason:l.fetchFailureReason,errorUpdateCount:l.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:l.dataUpdateCount>s.dataUpdateCount||l.errorUpdateCount>s.errorUpdateCount,isFetching:g,isRefetching:g&&!_,isLoadingError:v&&!b,isPaused:l.fetchStatus===`paused`,isPlaceholderData:u,isRefetchError:v&&b,isStale:Be(e,t),refetch:this.refetch,promise:this.#o,isEnabled:re(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){let t=x.data!==void 0,r=x.status===`error`&&!t,i=e=>{r?e.reject(x.error):t&&e.resolve(x.data)},a=()=>{let e=this.#o=x.promise=ve();i(e)},o=this.#o;switch(o.status){case`pending`:e.queryHash===n.queryHash&&i(o);break;case`fulfilled`:(r||x.data!==o.value)&&a();break;case`rejected`:(!r||x.error!==o.reason)&&a();break}}return x}updateResult(){let e=this.#r,t=this.createResult(this.#t,this.options);this.#i=this.#t.state,this.#a=this.options,this.#i.data!==void 0&&(this.#u=this.#t),!D(t,e)&&(this.#r=t,this.#C({listeners:(()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,n=typeof t==`function`?t():t;if(n===`all`||!n&&!this.#m.size)return!0;let r=new Set(n??this.#m);return this.options.throwOnError&&r.add(`error`),Object.keys(this.#r).some(t=>{let n=t;return this.#r[n]!==e[n]&&r.has(n)})})()}))}#S(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;let t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){xe.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:`observerResultsUpdated`})})}};function Ie(e,t){return re(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status===`error`&&re(t.retryOnMount,e)===!1)}function Le(e,t){return Ie(e,t)||e.state.data!==void 0&&Re(e,t,t.refetchOnMount)}function Re(e,t,n){if(re(t.enabled,e)!==!1&&T(t.staleTime,e)!==`static`){let r=typeof n==`function`?n(e):n;return r===`always`||r!==!1&&Be(e,t)}return!1}function ze(e,t,n,r){return(e!==t||re(r.enabled,e)===!1)&&(!n.suspense||e.state.status!==`error`)&&Be(e,n)}function Be(e,t){return re(t.enabled,e)!==!1&&e.isStaleByTime(T(t.staleTime,e))}function Ve(e,t){return!D(e.getCurrentResult(),t)}var He=class extends De{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||Ue(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=Ee({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),xe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function Ue(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var We=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new He({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=Ge(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=Ge(e);if(typeof t==`string`){let n=this.#t.get(t);if(n)if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=Ge(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}else return!0}runNext(e){let t=Ge(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){xe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ae(t,e))}findAll(e={}){return this.getAll().filter(t=>ae(e,t))}notify(e){xe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return xe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function Ge(e){return e.options.scope?.id}var Ke=class extends v{#e;#t=void 0;#n;#r;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#i()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),D(this.options,t)||this.#e.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&se(t.mutationKey)!==se(this.options.mutationKey)?this.reset():this.#n?.state.status===`pending`&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#i(),this.#a(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#i(),this.#a()}mutate(e,t){return this.#r=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#i(){let e=this.#n?.state??Ue();this.#t={...e,isPending:e.status===`pending`,isSuccess:e.status===`success`,isError:e.status===`error`,isIdle:e.status===`idle`,mutate:this.mutate,reset:this.reset}}#a(e){xe.batch(()=>{if(this.#r&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,r={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type===`success`){try{this.#r.onSuccess?.(e.data,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(e.data,null,t,n,r)}catch(e){Promise.reject(e)}}else if(e?.type===`error`){try{this.#r.onError?.(e.error,t,n,r)}catch(e){Promise.reject(e)}try{this.#r.onSettled?.(void 0,e.error,t,n,r)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},qe=class extends v{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??oe(r,t),a=this.get(i);return a||(a=new je({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){xe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ie(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>ie(e,t)):t}notify(e){xe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){xe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){xe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new qe,this.#t=e.mutationCache||new We,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=y.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=Se.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(T(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return xe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;xe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return xe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=xe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return xe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=xe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(T(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return Se.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(se(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{ce(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(se(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{ce(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=oe(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===j&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Ye=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Xe=o(((e,t)=>{t.exports=Ye()})),M=l(d(),1),N=Xe(),Ze=M.createContext(void 0),Qe=e=>{let t=M.useContext(Ze);if(e)return e;if(!t)throw Error(`No QueryClient set, use QueryClientProvider to set one`);return t},$e=({client:e,children:t})=>(M.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,N.jsx)(Ze.Provider,{value:e,children:t})),et=M.createContext(!1),tt=()=>M.useContext(et);et.Provider;function nt(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var rt=M.createContext(nt()),it=()=>M.useContext(rt),at=(e,t,n)=>{let r=n?.state.error&&typeof e.throwOnError==`function`?he(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},ot=e=>{M.useEffect(()=>{e.clearReset()},[e])},st=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(i&&e.data===void 0||he(n,[e.error,r])),ct=e=>{if(e.suspense){let t=1e3,n=e=>e===`static`?e:Math.max(e??t,t),r=e.staleTime;e.staleTime=typeof r==`function`?(...e)=>n(r(...e)):n(r),typeof e.gcTime==`number`&&(e.gcTime=Math.max(e.gcTime,t))}},lt=(e,t)=>e.isLoading&&e.isFetching&&!t,ut=(e,t)=>e?.suspense&&t.isPending,dt=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function ft(e,t,n){let r=tt(),i=it(),a=Qe(n),o=a.defaultQueryOptions(e);a.getDefaultOptions().queries?._experimental_beforeQuery?.(o);let s=a.getQueryCache().get(o.queryHash),c=e.subscribed!==!1;o._optimisticResults=r?`isRestoring`:c?`optimistic`:void 0,ct(o),at(o,i,s),ot(i);let l=!a.getQueryCache().get(o.queryHash),[u]=M.useState(()=>new t(a,o)),d=u.getOptimisticResult(o),f=!r&&c;if(M.useSyncExternalStore(M.useCallback(e=>{let t=f?u.subscribe(xe.batchCalls(e)):C;return u.updateResult(),t},[u,f]),()=>u.getCurrentResult(),()=>u.getCurrentResult()),M.useEffect(()=>{u.setOptions(o)},[o,u]),ut(o,d))throw dt(o,u,i);if(st({result:d,errorResetBoundary:i,throwOnError:o.throwOnError,query:s,suspense:o.suspense}))throw d.error;return a.getDefaultOptions().queries?._experimental_afterQuery?.(o,d),o.experimental_prefetchInRender&&!_e.isServer()&<(d,r)&&(l?dt(o,u,i):s?.promise)?.catch(C).finally(()=>{u.updateResult()}),o.notifyOnChangeProps?d:u.trackResult(d)}function pt(e,t){return ft(e,Fe,t)}function mt(e,t){let n=Qe(t),[r]=M.useState(()=>new Ke(n,e));M.useEffect(()=>{r.setOptions(e)},[r,e]);let i=M.useSyncExternalStore(M.useCallback(e=>r.subscribe(xe.batchCalls(e)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),a=M.useCallback((e,t)=>{r.mutate(e,t).catch(C)},[r]);if(i.error&&he(r.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:a,mutateAsync:i.mutate}}var ht=l(h(),1),gt=_(),_t=`modulepreload`,vt=function(e){return`/`+e},yt={},bt=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=vt(t,n),t=s(t),t in yt)return;yt[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:_t,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},xt=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,St=/^[\\/]{2}/;function Ct(e,t){return t+e.replace(/\\/g,`/`)}var wt=`popstate`;function Tt(e){return typeof e==`object`&&!!e&&`pathname`in e&&`search`in e&&`hash`in e&&`state`in e&&`key`in e}function Et(e={}){function t(e,t){let n=t.state?.masked,{pathname:r,search:i,hash:a}=n||e.location;return At(``,{pathname:r,search:i,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||`default`,n?{pathname:e.location.pathname,search:e.location.search,hash:e.location.hash}:void 0)}function n(e,t){return typeof t==`string`?t:jt(t)}return Nt(t,n,null,e)}function P(e,t){if(e===!1||e==null)throw Error(t)}function Dt(e,t){if(!e){typeof console<`u`&&console.warn(t);try{throw Error(t)}catch{}}}function Ot(){return Math.random().toString(36).substring(2,10)}function kt(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function At(e,t,n=null,r,i){return{pathname:typeof e==`string`?e:e.pathname,search:``,hash:``,...typeof t==`string`?Mt(t):t,state:n,key:t&&t.key||r||Ot(),mask:i}}function jt({pathname:e=`/`,search:t=``,hash:n=``}){return t&&t!==`?`&&(e+=t.charAt(0)===`?`?t:`?`+t),n&&n!==`#`&&(e+=n.charAt(0)===`#`?n:`#`+n),e}function Mt(e){let t={};if(e){let n=e.indexOf(`#`);n>=0&&(t.hash=e.substring(n),e=e.substring(0,n));let r=e.indexOf(`?`);r>=0&&(t.search=e.substring(r),e=e.substring(0,r)),e&&(t.pathname=e)}return t}function Nt(e,t,n,r={}){let{window:i=document.defaultView,v5Compat:a=!1}=r,o=i.history,s=`POP`,c=null,l=u();l??(l=0,o.replaceState({...o.state,idx:l},``));function u(){return(o.state||{idx:null}).idx}function d(){s=`POP`;let e=u(),t=e==null?null:e-l;l=e,c&&c({action:s,location:h.location,delta:t})}function f(e,t){s=`PUSH`;let r=Tt(e)?e:At(h.location,e,t);n&&n(r,e),l=u()+1;let d=kt(r,l),f=h.createHref(r.mask||r);try{o.pushState(d,``,f)}catch(e){if(e instanceof DOMException&&e.name===`DataCloneError`)throw e;i.location.assign(f)}a&&c&&c({action:s,location:h.location,delta:1})}function p(e,t){s=`REPLACE`;let r=Tt(e)?e:At(h.location,e,t);n&&n(r,e),l=u();let i=kt(r,l),d=h.createHref(r.mask||r);o.replaceState(i,``,d),a&&c&&c({action:s,location:h.location,delta:0})}function m(e){return Pt(i,e)}let h={get action(){return s},get location(){return e(i,o)},listen(e){if(c)throw Error(`A history only accepts one active listener`);return i.addEventListener(wt,d),c=e,()=>{i.removeEventListener(wt,d),c=null}},createHref(e){return t(i,e)},createURL:m,encodeLocation(e){let t=m(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:f,replace:p,go(e){return o.go(e)}};return h}function Pt(e,t,n=!1){let r=`http://localhost`;e&&(r=e.location.origin===`null`?e.location.href:e.location.origin),P(r,`No window.location.(origin|href) available to create URL`);let i=typeof t==`string`?t:jt(t);return i=i.replace(/ $/,`%20`),!n&&St.test(i)&&(i=r+i),new URL(i,r)}function Ft(e,t,n=`/`){return It(e,t,n,!1)}function It(e,t,n,r,i){let a=nn((typeof t==`string`?Mt(t):t).pathname||`/`,n);if(a==null)return null;let o=i??Rt(e),s=null,c=tn(a);for(let e=0;s==null&&e{let c={relativePath:s===void 0?e.path||``:s,caseSensitive:e.caseSensitive===!0,childrenIndex:a,route:e};if(c.relativePath.startsWith(`/`)){if(!c.relativePath.startsWith(r)&&o)return;P(c.relativePath.startsWith(r),`Absolute route path "${c.relativePath}" nested under path "${r}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),c.relativePath=c.relativePath.slice(r.length)}let l=dn([r,c.relativePath]),u=n.concat(c);e.children&&e.children.length>0&&(P(e.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${l}".`),zt(e.children,t,u,l,o)),!(e.path==null&&!e.index)&&t.push({path:l,score:Yt(l,e.index),routesMeta:u.map((e,t)=>{let[n,r]=en(e.relativePath,e.caseSensitive,t===u.length-1);return{...e,matcher:n,compiledParams:r}})})};return e.forEach((e,t)=>{if(e.path===``||!e.path?.includes(`?`))a(e,t);else for(let n of Bt(e.path))a(e,t,!0,n)}),t}function Bt(e){let t=e.split(`/`);if(t.length===0)return[];let[n,...r]=t,i=n.endsWith(`?`),a=n.replace(/\?$/,``);if(r.length===0)return i?[a,``]:[a];let o=Bt(r.join(`/`)),s=[];return s.push(...o.map(e=>e===``?a:[a,e].join(`/`))),i&&s.push(...o),s.map(t=>e.startsWith(`/`)&&t===``?`/`:t)}function Vt(e){e.sort((e,t)=>e.score===t.score?Xt(e.routesMeta.map(e=>e.childrenIndex),t.routesMeta.map(e=>e.childrenIndex)):t.score-e.score)}var Ht=/^:[\w-]+$/,Ut=3,Wt=2,Gt=1,Kt=10,qt=-2,Jt=e=>e===`*`;function Yt(e,t){let n=e.split(`/`),r=n.length;return n.some(Jt)&&(r+=qt),t&&(r+=Wt),n.filter(e=>!Jt(e)).reduce((e,t)=>e+(Ht.test(t)?Ut:t===``?Gt:Kt),r)}function Xt(e,t){return e.length===t.length&&e.slice(0,-1).every((e,n)=>e===t[n])?e[e.length-1]-t[t.length-1]:0}function Zt(e,t,n=!1){let{routesMeta:r}=e,i={},a=`/`,o=[];for(let e=0;e{if(t===`*`){let e=s[r]||``;o=a.slice(0,a.length-e.length).replace(/(.)\/+$/,`$1`)}let i=s[r];return n&&!i?e[t]=void 0:e[t]=(i||``).replace(/%2F/g,`/`),e},{}),pathname:a,pathnameBase:o,pattern:e}}function en(e,t=!1,n=!0){Dt(e===`*`||!e.endsWith(`*`)||e.endsWith(`/*`),`Route path "${e}" will be treated as if it were "${e.replace(/\*$/,`/*`)}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${e.replace(/\*$/,`/*`)}".`);let r=[],i=`^`+e.replace(/\/*\*?$/,``).replace(/^\/*/,`/`).replace(/[\\.*+^${}|()[\]]/g,`\\$&`).replace(/\/:([\w-]+)(\?)?/g,(e,t,n,i,a)=>{if(r.push({paramName:t,isOptional:n!=null}),n){let t=a.charAt(i+e.length);return t&&t!==`/`?`/([^\\/]*)`:`(?:/([^\\/]*))?`}return`/([^\\/]+)`}).replace(/\/([\w-]+)\?(\/|$)/g,`(/$1)?$2`);return e.endsWith(`*`)?(r.push({paramName:`*`}),i+=e===`*`||e===`/*`?`(.*)$`:`(?:\\/(.+)|\\/*)$`):n?i+=`\\/*$`:e!==``&&e!==`/`&&(i+=`(?:(?=\\/|$))`),[new RegExp(i,t?void 0:`i`),r]}function tn(e){try{return e.split(`/`).map(e=>decodeURIComponent(e).replace(/\//g,`%2F`)).join(`/`)}catch(t){return Dt(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function nn(e,t){if(t===`/`)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith(`/`)?t.length-1:t.length,r=e.charAt(n);return r&&r!==`/`?null:e.slice(n)||`/`}function rn(e,t=`/`){let{pathname:n,search:r=``,hash:i=``}=typeof e==`string`?Mt(e):e,a;return n?(n=un(n),a=n.startsWith(`/`)?an(n.substring(1),`/`):an(n,t)):a=t,{pathname:a,search:mn(r),hash:hn(i)}}function an(e,t){let n=fn(t).split(`/`);return e.split(`/`).forEach(e=>{e===`..`?n.length>1&&n.pop():e!==`.`&&n.push(e)}),n.length>1?n.join(`/`):`/`}function on(e,t,n,r){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(r)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function sn(e){return e.filter((e,t)=>t===0||e.route.path&&e.route.path.length>0)}function cn(e){let t=sn(e);return t.map((e,n)=>n===t.length-1?e.pathname:e.pathnameBase)}function ln(e,t,n,r=!1){let i;typeof e==`string`?i=Mt(e):(i={...e},P(!i.pathname||!i.pathname.includes(`?`),on(`?`,`pathname`,`search`,i)),P(!i.pathname||!i.pathname.includes(`#`),on(`#`,`pathname`,`hash`,i)),P(!i.search||!i.search.includes(`#`),on(`#`,`search`,`hash`,i)));let a=e===``||i.pathname===``,o=a?`/`:i.pathname,s;if(o==null)s=n;else{let e=t.length-1;if(!r&&o.startsWith(`..`)){let t=o.split(`/`);for(;t[0]===`..`;)t.shift(),--e;i.pathname=t.join(`/`)}s=e>=0?t[e]:`/`}let c=rn(i,s),l=o&&o!==`/`&&o.endsWith(`/`),u=(a||o===`.`)&&n.endsWith(`/`);return!c.pathname.endsWith(`/`)&&(l||u)&&(c.pathname+=`/`),c}var un=e=>e.replace(/[\\/]{2,}/g,`/`),dn=e=>un(e.join(`/`)),fn=e=>e.replace(/\/+$/,``),pn=e=>fn(e).replace(/^\/*/,`/`),mn=e=>!e||e===`?`?``:e.startsWith(`?`)?e:`?`+e,hn=e=>!e||e===`#`?``:e.startsWith(`#`)?e:`#`+e,gn=class{constructor(e,t,n,r=!1){this.status=e,this.statusText=t||``,this.internal=r,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}};function _n(e){return e!=null&&typeof e.status==`number`&&typeof e.statusText==`string`&&typeof e.internal==`boolean`&&`data`in e}function vn(e){return dn(e.map(e=>e.route.path).filter(Boolean))||`/`}var yn=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function bn(e,t){let n=e;if(typeof n!=`string`||!xt.test(n))return{absoluteURL:void 0,isExternal:!1,to:n};let r=n,i=!1;if(yn)try{let e=new URL(window.location.href),r=St.test(n)?new URL(Ct(n,e.protocol)):new URL(n),a=nn(r.pathname,t);r.origin===e.origin&&a!=null?n=a+r.search+r.hash:i=!0}catch{Dt(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:r,isExternal:i,to:n}}Object.getOwnPropertyNames(Object.prototype).sort().join(`\0`);var xn=[`POST`,`PUT`,`PATCH`,`DELETE`];new Set(xn);var Sn=[`GET`,...xn];new Set(Sn);var Cn=[`about:`,`blob:`,`chrome:`,`chrome-untrusted:`,`content:`,`data:`,`devtools:`,`file:`,`filesystem:`,`javascript:`];function wn(e){try{return Cn.includes(new URL(e).protocol)}catch{return!1}}var Tn=M.createContext(null);Tn.displayName=`DataRouter`;var En=M.createContext(null);En.displayName=`DataRouterState`;var Dn=M.createContext(!1);function On(){return M.useContext(Dn)}var kn=M.createContext({isTransitioning:!1});kn.displayName=`ViewTransition`;var An=M.createContext(new Map);An.displayName=`Fetchers`;var jn=M.createContext(null);jn.displayName=`Await`;var Mn=M.createContext(null);Mn.displayName=`Navigation`;var Nn=M.createContext(null);Nn.displayName=`Location`;var Pn=M.createContext({outlet:null,matches:[],isDataRoute:!1});Pn.displayName=`Route`;var Fn=M.createContext(null);Fn.displayName=`RouteError`;var In=`REACT_ROUTER_ERROR`,Ln=`REDIRECT`,Rn=`ROUTE_ERROR_RESPONSE`;function zn(e){if(e.startsWith(`${In}:${Ln}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`&&typeof t.location==`string`&&typeof t.reloadDocument==`boolean`&&typeof t.replace==`boolean`)return t}catch{}}function Bn(e){if(e.startsWith(`${In}:${Rn}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t==`object`&&t&&typeof t.status==`number`&&typeof t.statusText==`string`)return new gn(t.status,t.statusText,t.data)}catch{}}function Vn(e,{relative:t}={}){P(Hn(),`useHref() may be used only in the context of a component.`);let{basename:n,navigator:r}=M.useContext(Mn),{hash:i,pathname:a,search:o}=Yn(e,{relative:t}),s=a;return n!==`/`&&(s=a===`/`?n:dn([n,a])),r.createHref({pathname:s,search:o,hash:i})}function Hn(){return M.useContext(Nn)!=null}function Un(){return P(Hn(),`useLocation() may be used only in the context of a component.`),M.useContext(Nn).location}var Wn=`You should call navigate() in a React.useEffect(), not when your component is first rendered.`;function Gn(e){M.useContext(Mn).static||M.useLayoutEffect(e)}function Kn(){let{isDataRoute:e}=M.useContext(Pn);return e?mr():qn()}function qn(){P(Hn(),`useNavigate() may be used only in the context of a component.`);let e=M.useContext(Tn),{basename:t,navigator:n}=M.useContext(Mn),{matches:r}=M.useContext(Pn),{pathname:i}=Un(),a=JSON.stringify(cn(r)),o=M.useRef(!1);return Gn(()=>{o.current=!0}),M.useCallback((r,s={})=>{if(Dt(o.current,Wn),!o.current)return;if(typeof r==`number`){n.go(r);return}let c=ln(r,JSON.parse(a),i,s.relative===`path`);e==null&&t!==`/`&&(c.pathname=c.pathname===`/`?t:dn([t,c.pathname])),(s.replace?n.replace:n.push)(c,s.state,s)},[t,n,a,i,e])}M.createContext(null);function Jn(){let{matches:e}=M.useContext(Pn);return e[e.length-1]?.params??{}}function Yn(e,{relative:t}={}){let{matches:n}=M.useContext(Pn),{pathname:r}=Un(),i=JSON.stringify(cn(n));return M.useMemo(()=>ln(e,JSON.parse(i),r,t===`path`),[e,i,r,t])}function Xn(e,t){return Zn(e,t)}function Zn(e,t,n){P(Hn(),`useRoutes() may be used only in the context of a component.`);let{navigator:r}=M.useContext(Mn),{matches:i}=M.useContext(Pn),a=i[i.length-1],o=a?a.params:{},s=a?a.pathname:`/`,c=a?a.pathnameBase:`/`,l=a&&a.route;{let e=l&&l.path||``;gr(s,!l||e.endsWith(`*`)||e.endsWith(`*?`),`You rendered descendant (or called \`useRoutes()\`) at "${s}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. + +Please change the parent to .`)}let u=Un(),d;if(t){let e=typeof t==`string`?Mt(t):t;P(c===`/`||e.pathname?.startsWith(c),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${c}" but pathname "${e.pathname}" was given in the \`location\` prop.`),d=e}else d=u;let f=d.pathname||`/`,p=f;if(c!==`/`){let e=c.replace(/^\//,``).split(`/`);p=`/`+f.replace(/^\//,``).split(`/`).slice(e.length).join(`/`)}let m=n&&n.state.matches.length?n.state.matches.map(e=>Object.assign(e,{route:n.manifest[e.route.id]||e.route})):Ft(e,{pathname:p});Dt(l||m!=null,`No routes matched location "${d.pathname}${d.search}${d.hash}" `),Dt(m==null||m[m.length-1].route.element!==void 0||m[m.length-1].route.Component!==void 0||m[m.length-1].route.lazy!==void 0,`Matched leaf route at location "${d.pathname}${d.search}${d.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let h=ir(m&&m.map(e=>Object.assign({},e,{params:Object.assign({},o,e.params),pathname:dn([c,r.encodeLocation?r.encodeLocation(e.pathname.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathname]),pathnameBase:e.pathnameBase===`/`?c:dn([c,r.encodeLocation?r.encodeLocation(e.pathnameBase.replace(/%/g,`%25`).replace(/\?/g,`%3F`).replace(/#/g,`%23`)).pathname:e.pathnameBase])})),i,n);return t&&h?M.createElement(Nn.Provider,{value:{location:{pathname:`/`,search:``,hash:``,state:null,key:`default`,mask:void 0,...d},navigationType:`POP`}},h):h}function Qn(){let e=pr(),t=_n(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),n=e instanceof Error?e.stack:null,r=`rgba(200,200,200, 0.5)`,i={padding:`0.5rem`,backgroundColor:r},a={padding:`2px 4px`,backgroundColor:r},o=null;return console.error(`Error handled by React Router default ErrorBoundary:`,e),o=M.createElement(M.Fragment,null,M.createElement(`p`,null,`💿 Hey developer 👋`),M.createElement(`p`,null,`You can provide a way better UX than this when your app throws errors by providing your own `,M.createElement(`code`,{style:a},`ErrorBoundary`),` or`,` `,M.createElement(`code`,{style:a},`errorElement`),` prop on your route.`)),M.createElement(M.Fragment,null,M.createElement(`h2`,null,`Unexpected Application Error!`),M.createElement(`h3`,{style:{fontStyle:`italic`}},t),n?M.createElement(`pre`,{style:i},n):null,o)}var $n=M.createElement(Qn,null),er=class extends M.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!==`idle`&&e.revalidation===`idle`?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error===void 0?t.error:e.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error(`React Router caught the following error during render`,e)}render(){let e=this.state.error;if(this.context&&typeof e==`object`&&e&&`digest`in e&&typeof e.digest==`string`){let t=Bn(e.digest);t&&(e=t)}let t=e===void 0?this.props.children:M.createElement(Pn.Provider,{value:this.props.routeContext},M.createElement(Fn.Provider,{value:e,children:this.props.component}));return this.context?M.createElement(nr,{error:e},t):t}};er.contextType=Dn;var tr=new WeakMap;function nr({children:e,error:t}){let{basename:n}=M.useContext(Mn);if(typeof t==`object`&&t&&`digest`in t&&typeof t.digest==`string`){let e=zn(t.digest);if(e){let r=tr.get(t);if(r)throw r;let i=bn(e.location,n),a=i.absoluteURL||i.to;if(wn(a))throw Error(`Invalid redirect location`);if(yn&&!tr.get(t))if(i.isExternal||e.reloadDocument)window.location.href=a;else{let n=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(i.to,{replace:e.replace}));throw tr.set(t,n),n}return M.createElement(`meta`,{httpEquiv:`refresh`,content:`0;url=${a}`})}}return e}function rr({routeContext:e,match:t,children:n}){let r=M.useContext(Tn);return r&&r.static&&r.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=t.route.id),M.createElement(Pn.Provider,{value:e},n)}function ir(e,t=[],n){let r=n?.state;if(e==null){if(!r)return null;if(r.errors)e=r.matches;else if(t.length===0&&!r.initialized&&r.matches.length>0)e=r.matches;else return null}let i=e,a=r?.errors;if(a!=null){let e=i.findIndex(e=>e.route.id&&a?.[e.route.id]!==void 0);P(e>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(a).join(`,`)}`),i=i.slice(0,Math.min(i.length,e+1))}let o=!1,s=-1;if(n&&r){o=r.renderFallback;for(let e=0;e=0?i.slice(0,s+1):[i[0]];break}}}}let c=n?.onError,l=r&&c?(e,t)=>{c(e,{location:r.location,params:r.matches?.[0]?.params??{},pattern:vn(r.matches),errorInfo:t})}:void 0;return i.reduceRight((e,n,c)=>{let u,d=!1,f=null,p=null;r&&(u=a&&n.route.id?a[n.route.id]:void 0,f=n.route.errorElement||$n,o&&(s<0&&c===0?(gr(`route-fallback`,!1,"No `HydrateFallback` element provided to render during initial hydration"),d=!0,p=null):s===c&&(d=!0,p=n.route.hydrateFallbackElement||null)));let m=t.concat(i.slice(0,c+1)),h=()=>{let t;return t=u?f:d?p:n.route.Component?M.createElement(n.route.Component,null):n.route.element?n.route.element:e,M.createElement(rr,{match:n,routeContext:{outlet:e,matches:m,isDataRoute:r!=null},children:t})};return r&&(n.route.ErrorBoundary||n.route.errorElement||c===0)?M.createElement(er,{location:r.location,revalidation:r.revalidation,component:f,error:u,children:h(),routeContext:{outlet:null,matches:m,isDataRoute:!0},onError:l}):h()},null)}function ar(e){return`${e} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function or(e){let t=M.useContext(Tn);return P(t,ar(e)),t}function sr(e){let t=M.useContext(En);return P(t,ar(e)),t}function cr(e){let t=M.useContext(Pn);return P(t,ar(e)),t}function lr(e){let t=cr(e),n=t.matches[t.matches.length-1];return P(n.route.id,`${e} can only be used on routes that contain a unique "id"`),n.route.id}function ur(){return lr(`useRouteId`)}function dr(){let e=sr(`useNavigation`);return M.useMemo(()=>{let{matches:t,historyAction:n,...r}=e.navigation;return r},[e.navigation])}function fr(){let{matches:e,loaderData:t}=sr(`useMatches`);return M.useMemo(()=>e.map(e=>Lt(e,t)),[e,t])}function pr(){let e=M.useContext(Fn),t=sr(`useRouteError`),n=lr(`useRouteError`);return e===void 0?t.errors?.[n]:e}function mr(){let{router:e}=or(`useNavigate`),t=lr(`useNavigate`),n=M.useRef(!1);return Gn(()=>{n.current=!0}),M.useCallback(async(r,i={})=>{Dt(n.current,Wn),n.current&&(typeof r==`number`?await e.navigate(r):await e.navigate(r,{fromRouteId:t,...i}))},[e,t])}var hr={};function gr(e,t,n){!t&&!hr[e]&&(hr[e]=!0,Dt(!1,n))}M.memo(_r);function _r({routes:e,manifest:t,future:n,state:r,isStatic:i,onError:a}){return Zn(e,void 0,{manifest:t,state:r,isStatic:i,onError:a,future:n})}function vr(e){P(!1,`A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .`)}function yr({basename:e=`/`,children:t=null,location:n,navigationType:r=`POP`,navigator:i,static:a=!1,useTransitions:o}){P(!Hn(),`You cannot render a inside another . You should never have more than one in your app.`);let s=e.replace(/^\/*/,`/`),c=M.useMemo(()=>({basename:s,navigator:i,static:a,useTransitions:o,future:{}}),[s,i,a,o]);typeof n==`string`&&(n=Mt(n));let{pathname:l=`/`,search:u=``,hash:d=``,state:f=null,key:p=`default`,mask:m}=n,h=M.useMemo(()=>{let e=nn(l,s);return e==null?null:{location:{pathname:e,search:u,hash:d,state:f,key:p,mask:m},navigationType:r}},[s,l,u,d,f,p,r,m]);return Dt(h!=null,` is not able to match the URL "${l}${u}${d}" because it does not start with the basename, so the won't render anything.`),h==null?null:M.createElement(Mn.Provider,{value:c},M.createElement(Nn.Provider,{children:t,value:h}))}function br({children:e,location:t}){return Xn(xr(e),t)}M.Component;function xr(e,t=[]){let n=[];return M.Children.forEach(e,(e,r)=>{if(!M.isValidElement(e))return;let i=[...t,r];if(e.type===M.Fragment){n.push.apply(n,xr(e.props.children,i));return}P(e.type===vr,`[${typeof e.type==`string`?e.type:e.type.name}] is not a component. All component children of must be a or `),P(!e.props.index||!e.props.children,`An index route cannot have child routes.`);let a={id:e.props.id||i.join(`-`),caseSensitive:e.props.caseSensitive,element:e.props.element,Component:e.props.Component,index:e.props.index,path:e.props.path,middleware:e.props.middleware,loader:e.props.loader,action:e.props.action,hydrateFallbackElement:e.props.hydrateFallbackElement,HydrateFallback:e.props.HydrateFallback,errorElement:e.props.errorElement,ErrorBoundary:e.props.ErrorBoundary,hasErrorBoundary:e.props.hasErrorBoundary===!0||e.props.ErrorBoundary!=null||e.props.errorElement!=null,shouldRevalidate:e.props.shouldRevalidate,handle:e.props.handle,lazy:e.props.lazy};e.props.children&&(a.children=xr(e.props.children,i)),n.push(a)}),n}var Sr=`get`,Cr=`application/x-www-form-urlencoded`;function wr(e){return typeof HTMLElement<`u`&&e instanceof HTMLElement}function Tr(e){return wr(e)&&e.tagName.toLowerCase()===`button`}function Er(e){return wr(e)&&e.tagName.toLowerCase()===`form`}function Dr(e){return wr(e)&&e.tagName.toLowerCase()===`input`}function Or(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function kr(e,t){return e.button===0&&(!t||t===`_self`)&&!Or(e)}function Ar(e=``){return new URLSearchParams(typeof e==`string`||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,n)=>{let r=e[n];return t.concat(Array.isArray(r)?r.map(e=>[n,e]):[[n,r]])},[]))}function jr(e,t){let n=Ar(e);return t&&t.forEach((e,r)=>{n.has(r)||t.getAll(r).forEach(e=>{n.append(r,e)})}),n}var Mr=null;function Nr(){if(Mr===null)try{new FormData(document.createElement(`form`),0),Mr=!1}catch{Mr=!0}return Mr}var Pr=new Set([`application/x-www-form-urlencoded`,`multipart/form-data`,`text/plain`]);function Fr(e){return e!=null&&!Pr.has(e)?(Dt(!1,`"${e}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Cr}"`),null):e}function Ir(e,t){let n,r,i,a,o;if(Er(e)){let o=e.getAttribute(`action`);r=o?nn(o,t):null,n=e.getAttribute(`method`)||Sr,i=Fr(e.getAttribute(`enctype`))||Cr,a=new FormData(e)}else if(Tr(e)||Dr(e)&&(e.type===`submit`||e.type===`image`)){let o=e.form;if(o==null)throw Error(`Cannot submit a + + ) + } + + return ( +

+ setDraft(clampToCodePoints(event.target.value, maxNameLength))} + onKeyDown={keyDown} + onBlur={() => void commit()} + /> +

+ ) +} diff --git a/web/src/index.css b/web/src/index.css index 0e682a5..3a6a211 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -237,6 +237,11 @@ p { text-wrap: pretty; } .session-title-line { display: flex; min-width: 0; align-items: center; gap: 0.75rem; } .session-title h1 { margin: 0; overflow-wrap: anywhere; font-size: 2.25rem; line-height: 1.15; letter-spacing: -0.035em; } .session-title p { margin: 0.5rem 0 0; color: var(--muted-foreground); overflow-wrap: anywhere; } +.editable-title { min-width: 0; } +.editable-title-trigger { display: inline-flex; min-width: 0; align-items: center; gap: 0.5rem; border: 0; border-radius: var(--radius); padding: 0; background: none; color: inherit; font: inherit; letter-spacing: inherit; text-align: left; overflow-wrap: anywhere; cursor: text; } +.editable-title-icon { flex: none; color: var(--muted-foreground); opacity: 0; transition: opacity 0.15s ease; } +.editable-title-trigger:hover .editable-title-icon, .editable-title-trigger:focus-visible .editable-title-icon { opacity: 1; } +.editable-title-input { min-height: 0; padding: 0.125rem 0.375rem; font: inherit; letter-spacing: inherit; } .session-actions { display: flex; flex: 0 0 auto; align-items: center; gap: 0.625rem; } .session-actions a { text-decoration: none; } .back-link { display: inline-flex; margin-top: 1rem; color: var(--primary); text-underline-offset: 0.18em; } diff --git a/web/src/lib/api.ts b/web/src/lib/api.ts index d5f7e26..dea9699 100644 --- a/web/src/lib/api.ts +++ b/web/src/lib/api.ts @@ -46,6 +46,16 @@ export interface CreateSessionRequest { target_country?: string } +// Edit requests carry only the properties being changed. Both are optional-by- +// design so further editable fields can join them without breaking callers. +export interface EditSessionRequest { + name?: string +} + +export interface EditRunRequest { + name?: string +} + export interface Readiness { postgres: boolean clickhouse: boolean @@ -235,6 +245,22 @@ export function useReenableSession() { }) } +export function useEditSession() { + const queryClient = useQueryClient() + return useMutation({ + mutationFn: ({ id, ...edit }: EditSessionRequest & { id: string }) => api(`/api/sessions/${id}`, { + method: 'PATCH', + body: JSON.stringify(edit), + }), + onSuccess: async (_data, { id }) => { + await Promise.all([ + queryClient.invalidateQueries({ queryKey: ['sessions'] }), + queryClient.invalidateQueries({ queryKey: ['sessions', id] }), + ]) + }, + }) +} + export function useSession(id: string) { const visible = useDocumentVisible() return useQuery({ @@ -456,6 +482,25 @@ export function useReenableRun() { }) } +export function useEditRun() { + const queryClient = useQueryClient() + return useMutation({ + mutationFn: ({ id, ...edit }: EditRunRequest & { id: string }) => api(`/api/runs/${id}`, { + method: 'PATCH', + body: JSON.stringify(edit), + }), + onSuccess: async (_data, { id }) => { + await Promise.all([ + queryClient.invalidateQueries({ queryKey: ['runs'] }), + queryClient.invalidateQueries({ queryKey: ['runs', id] }), + // A run rename cascades to its variant sessions, so their names are + // stale too. + queryClient.invalidateQueries({ queryKey: ['sessions'] }), + ]) + }, + }) +} + export function useDeleteRun() { const queryClient = useQueryClient() return useMutation({ diff --git a/web/src/pages/run-page.test.tsx b/web/src/pages/run-page.test.tsx index 01e224e..b5d937c 100644 --- a/web/src/pages/run-page.test.tsx +++ b/web/src/pages/run-page.test.tsx @@ -1,5 +1,6 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { render, screen, waitFor } from '@testing-library/react' +import { render, screen, waitFor, within } from '@testing-library/react' +import userEvent from '@testing-library/user-event' import { MemoryRouter, Route, Routes } from 'react-router-dom' import { describe, expect, it, vi } from 'vitest' @@ -27,7 +28,11 @@ describe('RunPage', () => { , ) await waitFor(() => expect(screen.getByText('poolcheck')).toBeInTheDocument()) - expect(await screen.findByText(/40/)).toBeInTheDocument() // estimated pool size + // Scoped to the strip and matched exactly: an unscoped /40/ also matches the + // "Last updated …" clock, so it failed whenever the current minute or second + // happened to be 40. + const summary = await screen.findByRole('region', { name: 'Run summary' }) + expect(within(summary).getByText('40')).toBeInTheDocument() // estimated pool size }) it('shows the manual target country the honor rate is measured against', async () => { @@ -78,4 +83,75 @@ describe('RunPage', () => { expect((await screen.findAllByText(/country=de/)).length).toBeGreaterThan(0) expect(screen.getByText(/target US \(manual\)/)).toBeInTheDocument() }) + + it('renames the run from the header and shows the cascaded variant name', async () => { + let name = 'Alpha' + const detail = () => ({ + run: { id: 'r1', name, template_display: 'gate:1080', status: 'running', variant_count: 1, distinct_ips: 0, created_at: new Date().toISOString() }, + variants: [{ session_id: 's1', name: `${name} (region=eu)`, cell_key: '{}', params: { region: 'eu' }, status: 'running', samples_taken: 0, distinct_ips: 0 }], + }) + const report = { distinct_ips: 0, estimated_pool_size: 0, pool_size_lower_bound: false, honor_rate: null, composition: { mobile: 0, residential: 0, datacenter: 0, unknown: 0 }, risk_histogram: [], flagged_ips: 0, flagged_percent: 0, dnsbl_hit_ips: 0, series: [], cells: [], ips: [] } + const fetchMock = vi.fn((input: RequestInfo | URL, init?: RequestInit) => { + const url = String(input) + if (init?.method === 'PATCH') { + // The server renames the run and cascades to the generated variant name. + name = (JSON.parse(String(init.body)) as { name: string }).name + return Promise.resolve(new Response(JSON.stringify(detail().run), { status: 200, headers: { 'Content-Type': 'application/json' } })) + } + const body = url.endsWith('/report') ? report : detail() + return Promise.resolve(new Response(JSON.stringify(body), { status: 200, headers: { 'Content-Type': 'application/json' } })) + }) + vi.stubGlobal('fetch', fetchMock) + const client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + render( + + + } /> + + , + ) + const user = userEvent.setup() + + await screen.findByRole('heading', { level: 1, name: 'Alpha' }) + await user.click(screen.getByRole('button', { name: 'Rename run name' })) + const input = screen.getByRole('textbox', { name: 'run name' }) + await user.clear(input) + await user.type(input, 'Beta{Enter}') + + expect(await screen.findByRole('heading', { level: 1, name: 'Beta' })).toBeInTheDocument() + expect(await screen.findByText('Beta (region=eu)')).toBeInTheDocument() + const patches = fetchMock.mock.calls.filter(([, init]) => (init as RequestInit | undefined)?.method === 'PATCH') + expect(patches).toHaveLength(1) + expect(JSON.parse(String((patches[0][1] as RequestInit).body))).toEqual({ name: 'Beta' }) + }) + + it('surfaces a failed run rename without losing the typed name', async () => { + const detail = { run: { id: 'r1', name: 'Alpha', template_display: 'gate:1080', status: 'running', variant_count: 0, distinct_ips: 0, created_at: new Date().toISOString() }, variants: [] } + const report = { distinct_ips: 0, estimated_pool_size: 0, pool_size_lower_bound: false, honor_rate: null, composition: { mobile: 0, residential: 0, datacenter: 0, unknown: 0 }, risk_histogram: [], flagged_ips: 0, flagged_percent: 0, dnsbl_hit_ips: 0, series: [], cells: [], ips: [] } + vi.stubGlobal('fetch', vi.fn((input: RequestInfo | URL, init?: RequestInit) => { + if (init?.method === 'PATCH') { + return Promise.resolve(new Response(JSON.stringify({ code: 'invalid_request', message: 'request is invalid' }), { status: 400, statusText: 'Request failed', headers: { 'Content-Type': 'application/json' } })) + } + const body = String(input).endsWith('/report') ? report : detail + return Promise.resolve(new Response(JSON.stringify(body), { status: 200, headers: { 'Content-Type': 'application/json' } })) + })) + const client = new QueryClient({ defaultOptions: { queries: { retry: false } } }) + render( + + + } /> + + , + ) + const user = userEvent.setup() + + await screen.findByRole('heading', { level: 1, name: 'Alpha' }) + await user.click(screen.getByRole('button', { name: 'Rename run name' })) + const input = screen.getByRole('textbox', { name: 'run name' }) + await user.clear(input) + await user.type(input, 'Rejected name{Enter}') + + expect(await screen.findByText('Could not rename run')).toBeInTheDocument() + expect(screen.getByRole('textbox', { name: 'run name' })).toHaveValue('Rejected name') + }) }) diff --git a/web/src/pages/run-page.tsx b/web/src/pages/run-page.tsx index 7d8734c..fe64c26 100644 --- a/web/src/pages/run-page.tsx +++ b/web/src/pages/run-page.tsx @@ -6,6 +6,7 @@ import { PoolCompositionChart } from '../components/report/composition-charts' import { RiskHistogram } from '../components/report/risk-histogram' import { LatencyChart, SuccessRateChart } from '../components/report/timeseries-charts' import { SessionStatusBadge } from '../components/session-status-badge' +import { EditableTitle } from '../components/editable-title' import { Alert } from '../components/ui/alert' import { Button } from '../components/ui/button' import { Skeleton } from '../components/ui/skeleton' @@ -18,6 +19,7 @@ import { type RunReport, type VariantSummary, useDeleteRun, + useEditRun, useReenableRun, useRun, useRunReport, @@ -34,6 +36,7 @@ export function RunPage() { const stop = useStopRun() const reenable = useReenableRun() const del = useDeleteRun() + const edit = useEditRun() if (run.isPending) return if (run.error instanceof APIError && run.error.status === 404) return @@ -71,7 +74,7 @@ export function RunPage() { Runs
-

{detail.name}

+
edit.mutateAsync({ id, name })} />

{detail.template_display}{detail.variant_count} variant{detail.variant_count === 1 ? '' : 's'}{targetCountry && <>Target country {targetCountry} (manual)}

@@ -84,6 +87,7 @@ export function RunPage() { {stop.isError && } {reenable.isError && } {del.isError && } + {edit.isError && } {report.data && <> diff --git a/web/src/pages/session-page.test.tsx b/web/src/pages/session-page.test.tsx index 0548737..6c31816 100644 --- a/web/src/pages/session-page.test.tsx +++ b/web/src/pages/session-page.test.tsx @@ -367,6 +367,44 @@ describe('SessionPage', () => { expect(screen.getByTestId('location')).toHaveTextContent(`/${sessionID}?tab=reputation`) expect(callsFor(fetchMock, `/api/sessions/${sessionID}/samples?page=1&page_size=50`)).toBe(1) }) + + it('renames the session from the header and shows the stored name', async () => { + let name = 'Frankfurt sticky' + const fetchMock = createFetch({ session: () => ({ ...runningSession, name }) }) + vi.stubGlobal('fetch', fetchMock) + renderSession() + const user = userEvent.setup() + + await screen.findByRole('heading', { level: 1, name: 'Frankfurt sticky' }) + await user.click(screen.getByRole('button', { name: 'Rename session name' })) + const input = screen.getByRole('textbox', { name: 'session name' }) + await user.clear(input) + // The server is the source of truth for the name the page then refetches. + name = 'Frankfurt residential' + await user.type(input, 'Frankfurt residential{Enter}') + + expect(await screen.findByRole('heading', { level: 1, name: 'Frankfurt residential' })).toBeInTheDocument() + const patches = fetchMock.mock.calls.filter(([, init]) => (init as RequestInit | undefined)?.method === 'PATCH') + expect(patches).toHaveLength(1) + expect(JSON.parse(String((patches[0][1] as RequestInit).body))).toEqual({ name: 'Frankfurt residential' }) + }) + + it('surfaces a failed rename without losing the typed name', async () => { + vi.stubGlobal('fetch', createFetch({ + renameResponse: () => jsonResponse({ code: 'invalid_request', message: 'request is invalid' }, 400), + })) + renderSession() + const user = userEvent.setup() + + await screen.findByRole('heading', { level: 1, name: 'Frankfurt sticky' }) + await user.click(screen.getByRole('button', { name: 'Rename session name' })) + const input = screen.getByRole('textbox', { name: 'session name' }) + await user.clear(input) + await user.type(input, 'Rejected name{Enter}') + + expect(await screen.findByText('Could not rename session')).toBeInTheDocument() + expect(screen.getByRole('textbox', { name: 'session name' })).toHaveValue('Rejected name') + }) }) function renderSession(search = '') { @@ -395,12 +433,19 @@ function createFetch(options: { report?: typeof report samples?: typeof samplePage reportResponse?: () => Response + renameResponse?: () => Response } = {}) { return vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => { const url = String(input) if (url === `/api/sessions/${sessionID}/report`) return options.reportResponse?.() ?? jsonResponse(options.report ?? report) if (url.startsWith(`/api/sessions/${sessionID}/samples`)) return jsonResponse(options.samples ?? samplePage) if (url === `/api/sessions/${sessionID}/stop` && init?.method === 'POST') return emptyResponse() + if (url === `/api/sessions/${sessionID}` && init?.method === 'PATCH') { + if (options.renameResponse) return options.renameResponse() + const body = JSON.parse(String(init.body)) as { name: string } + const current = typeof options.session === 'function' ? options.session() : options.session + return jsonResponse({ ...(current ?? runningSession), name: body.name }) + } if (url === `/api/sessions/${sessionID}`) { const value = typeof options.session === 'function' ? options.session() : options.session return jsonResponse(value ?? runningSession) diff --git a/web/src/pages/session-page.tsx b/web/src/pages/session-page.tsx index 6d356d0..752ff8f 100644 --- a/web/src/pages/session-page.tsx +++ b/web/src/pages/session-page.tsx @@ -10,11 +10,12 @@ import { SummaryStrip } from '../components/report/summary-strip' import { TargetingPanel } from '../components/report/targeting-panel' import { LatencyChart, PoolGrowthChart, SuccessRateChart } from '../components/report/timeseries-charts' import { SessionStatusBadge } from '../components/session-status-badge' +import { EditableTitle } from '../components/editable-title' import { Alert } from '../components/ui/alert' import { Button } from '../components/ui/button' import { Skeleton } from '../components/ui/skeleton' import { Tabs, TabsContent, TabsList, TabsTrigger } from '../components/ui/tabs' -import { APIError, useReenableSession, useSession, useSessionReport, useSessionSamples, useStopSession } from '../lib/api' +import { APIError, useEditSession, useReenableSession, useSession, useSessionReport, useSessionSamples, useStopSession } from '../lib/api' import { formatPercent, formatTimestampWithZone } from '../lib/format' type ReportTab = 'overview' | 'reputation' | 'samples' @@ -31,6 +32,7 @@ export function SessionPage() { const samples = useSessionSamples(id, page, tab === 'samples', running) const stop = useStopSession() const reenable = useReenableSession() + const edit = useEditSession() if (session.isPending) return if (session.error instanceof APIError && session.error.status === 404) return @@ -62,7 +64,7 @@ export function SessionPage() { Sessions
-

{session.data.name}

+
edit.mutateAsync({ id, name })} />

{session.data.proxy_display}{session.data.mode === 'sticky' ? 'Sticky' : 'Pool'}

@@ -73,6 +75,7 @@ export function SessionPage() {
{stop.isError && } {reenable.isError && } + {edit.isError && }
{report.dataUpdatedAt > 0 ? `Last updated ${formatTimestampWithZone(new Date(report.dataUpdatedAt).toISOString())}` : 'Waiting for report update'}