diff --git a/docs/design/2026-09-08-lab-mode-stream.md b/docs/design/2026-09-08-lab-mode-stream.md new file mode 100644 index 0000000..0f8ba4d --- /dev/null +++ b/docs/design/2026-09-08-lab-mode-stream.md @@ -0,0 +1,114 @@ +# Lab widget for `ModeStream` + +**Status:** approved (chat: looks good, implement it) +**Branch (later):** `feat/lab-mode-stream` +**Date:** 2026-09-08 + +## Overview + +[ModeStream](./2026-09-08-mode-stream.md) shipped without a Lab chapter (explicit non-goal). The explorer still stops at VectorSet. This PR adds the missing Stream chapter so the same 3-node Lab can append, range, trim, and delete a named log. + +Lab-only. No Engine / proto / RF change. + +## Problem + +`examples/lab` registers every other structured mode (`cluster.go` `labKeyspaces`, `ui/src/api.ts` `CHAPTERS`, `Playground.tsx`). There is no `stream` keyspace, no `/v1/op` dispatch for `xadd` / `xrange` / …, and no widget. Callers cannot see owner-minted ids or snapshot fan-out the way they can for List / VectorSet. + +## Non-goals + +- Consumer groups, blocking `XREAD`, caller-chosen ids. +- Standalone `examples/stream` binary (Lab is the walkthrough). +- Adding `stream` to stock `supercache-node -demo-keyspace`. +- Changing Stream contract, Flags, or peer `StreamAdd`. +- New scbench cells. + +## Contract + +- **API / proto:** no public change. Lab HTTP `/v1/op` gains Stream verbs; same `client.Client` calls. +- **Keyspace (in-process Lab mesh only):** name `stream`, `ModeStream`, RF=2, `StreamMaxLen=0` (no auto-trim; widget has XTrim). +- **Identity:** stream `name` (default `logs`). Owner = `Owner(name)`. +- **Existing clients:** unchanged. Remote attach works if the remote mesh already has a `stream` keyspace; otherwise ops return the usual missing-keyspace / invalid-argument errors. + +## Approach + +Same pattern as VectorSet / List. + +**Backend (`examples/lab`):** + +| File | Change | +|------|--------| +| `cluster.go` | `labKeyspaces` + `modeNames` include `stream` / `ModeStream` | +| `op.go` | `opArgs` fields `ID`, `Start`, `End` (string), `Count`, `MaxLen`; dispatch `xadd` / `xrange` / `xrevrange` / `xlen` / `xdel` / `xtrim`; `isWriteOp` adds `xadd`, `xdel`, `xtrim` | +| `scene.go` | scene `stream`: two `XAdd`, then `XRange - +`; demo name `logs` | +| `lab_test.go` | keyspace list + a Stream op test | + +Dispatch shapes (JSON `result`): + +| Op | Args | Result | +|----|------|--------| +| `xadd` | `value` (payload string) | `{id}` | +| `xrange` / `xrevrange` | `start`, `end`, `count` | `{entries:[{id,payload}]}` | +| `xlen` | — | `{n, present}` | +| `xdel` | `id` | `{acked}` | +| `xtrim` | `max_len` | `{acked}` | +| `delete` | existing | `{acked}` | + +`start` / `end` are strings (`-`, `+`, `millis-seq`, exclusive `(id`). `count<=0` means no cap (engine clamps >512). `XRevRange` uses the same min/max window as `XRange` (newest first) — not Redis high-then-low. + +**UI:** + +- Chapter `{ id: "stream", label: "Stream", ks: "stream", name: "logs" }` +- `widgets/Stream.tsx`: stacked labeled controls + placeholders (same as List / Geo) + - name, payload → **XAdd** (prints minted id in the results pane) + - start / end / count → **XRange** / **XRevRange** / **XLen** + - id → **XDel** + - maxLen → **XTrim** + - **Delete** whole stream +- Visual: after a range, a vertical log of `id` + payload (order from the RPC, no client-side filter). Empty range is empty, not an error. Missing name: `XLen` `present=false`. +- Results stay in the existing right-hand results pane (`last` JSON). Do not add a second results column inside the widget. + +**Product docs (same PR):** `examples/lab/README.md` chapter table. `docs/design/README.md` shipped row. No API/OpenAPI/PLAN change (no new public verb). + +### Rejected alternatives + +| Idea | Why not | +|------|---------| +| `examples/stream` binary | Second walkthrough; Lab already covers modes | +| StreamMaxLen=16 in Lab | Auto-trim would surprise; XTrim is enough | +| Redis `XREVRANGE + -` in the widget | Engine contract is start/end min/max | +| Client-side hit filter / hollow “window” | Same class of bug as the Geo radius ring | + +## Tests (write these first, after approval) + +| Test | Package | Asserts | +|------|---------|---------| +| `TestLabHTTPCluster` | `examples/lab` | keyspace list includes `stream` | +| `TestLabStreamXAddRange` | `examples/lab` | two `xadd`; `xlen` n=2 present; `xrange - +` both ids oldest-first; `xrevrange - +` newest first | +| `TestLabStreamWrongVerb` | `examples/lab` | `get` on `stream` → HTTP 400 + `invalid_argument` | +| `TestLabHoldFalse` | `examples/lab` | still passes (walkthrough unchanged) | + +## Bench risk + +- **Hot path?** no. Lab HTTP + demo keyspace only. +- Gate: shared smoke ±10%; Get-hit / StoreGetHit allocs flat. + +## Key Decisions + +1. Lab chapter only — reuse shipped Stream RPCs. +2. Default name `logs`; `StreamMaxLen=0`. +3. Timeline visual from the last range RPC, no extra filtering. +4. Same PR updates Lab README only (plus design index). + +## Open Questions + +None. + +## PR Plan + +### PR 1 — `feat: Lab ModeStream chapter` + +- **Title:** feat: Lab ModeStream chapter +- **Branch:** `feat/lab-mode-stream` +- **Files:** `examples/lab` backend + `ui/src` widget + rebuilt `ui/dist`; this design; Lab README +- **Dependencies:** ModeStream on `main` (PR #50) +- **Description:** Explorer only. No Engine contract change. diff --git a/docs/design/README.md b/docs/design/README.md index ea40206..4447237 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -35,6 +35,7 @@ Do not implement from a draft. | [2026-09-02-feature-folders.md](./2026-09-02-feature-folders.md) | Feature folders (List first) | | [2026-09-04-mode-vector-set.md](./2026-09-04-mode-vector-set.md) | `ModeVectorSet` | | [2026-09-08-mode-stream.md](./2026-09-08-mode-stream.md) | `ModeStream` | +| [2026-09-08-lab-mode-stream.md](./2026-09-08-lab-mode-stream.md) | Lab Stream chapter | | [2026-08-25-list-counter-version.md](./2026-08-25-list-counter-version.md) | List/Counter snapshot version | | [2026-08-13-unify-grpc-error-map.md](./2026-08-13-unify-grpc-error-map.md) | grpcmap | diff --git a/examples/lab/README.md b/examples/lab/README.md index 0529550..9cb19a8 100644 --- a/examples/lab/README.md +++ b/examples/lab/README.md @@ -43,6 +43,7 @@ runs the same verbs by hand. After each call the UI polls `LocalView` on every n | LoadThrough | `loadthrough` | SoT miss, hit, singleflight | | Tombstone | `cacheonly` | delete marker vs live | | Bloom … VectorSet | matching mode | thin widget + wrong-verb on Set | +| Stream | `stream` | append-only log; XAdd returns id; XRange `-` `+` | Lab HTTP defaults to `127.0.0.1:19080`. `-cluster` uses ephemeral cache/peer ports (`internal/testcluster`). Mock SoT latency: `-sot-latency` (in-process only). diff --git a/examples/lab/cluster.go b/examples/lab/cluster.go index a4138f9..333ec84 100644 --- a/examples/lab/cluster.go +++ b/examples/lab/cluster.go @@ -21,7 +21,7 @@ const ( var modeNames = []string{ "cacheonly", "loadthrough", "bloom", "set", "zset", "geo", "list", - "hash", "counter", "json", "bitmap", "hll", "topk", "cms", "vectorset", + "hash", "counter", "json", "bitmap", "hll", "topk", "cms", "vectorset", "stream", } type mockSoT struct { @@ -79,6 +79,7 @@ func labKeyspaces(src datasource.DataSource) []keyspace.Config { c.VectorDim = 2 return c }(), + base("stream", keyspace.ModeStream), } } diff --git a/examples/lab/lab_test.go b/examples/lab/lab_test.go index ec88861..6e06dd0 100644 --- a/examples/lab/lab_test.go +++ b/examples/lab/lab_test.go @@ -20,7 +20,7 @@ func TestLabHTTPCluster(t *testing.T) { } want := []string{ "cacheonly", "loadthrough", "bloom", "set", "zset", "geo", "list", - "hash", "counter", "json", "bitmap", "hll", "topk", "cms", "vectorset", + "hash", "counter", "json", "bitmap", "hll", "topk", "cms", "vectorset", "stream", } got := map[string]bool{} for _, raw := range asSlice(body["keyspaces"]) { @@ -197,6 +197,88 @@ func TestLabBloomGrid(t *testing.T) { } } +func TestLabStreamXAddRange(t *testing.T) { + lab := startTestLab(t) + name := "logs-" + fmt.Sprint(time.Now().UnixNano()) + a := postJSON(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "xadd", "name": name, + "args": map[string]any{"value": "old"}, + }) + if ok, _ := a["ok"].(bool); !ok { + t.Fatalf("xadd1: %v", a) + } + id1, _ := resultMap(a)["id"].(string) + if !strings.Contains(id1, "-") { + t.Fatalf("id1: %v", a) + } + b := postJSON(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "xadd", "name": name, + "args": map[string]any{"value": "new"}, + }) + id2, _ := resultMap(b)["id"].(string) + ln := postJSON(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "xlen", "name": name, + }) + res := resultMap(ln) + if n, _ := res["n"].(float64); n != 2 { + t.Fatalf("xlen: %v", ln) + } + if present, _ := res["present"].(bool); !present { + t.Fatalf("present: %v", ln) + } + fwd := postJSON(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "xrange", "name": name, + "args": map[string]any{"start": "-", "end": "+", "count": 0}, + }) + ents := resultEntries(fwd) + if len(ents) != 2 || ents[0]["id"] != id1 || ents[1]["id"] != id2 || ents[0]["payload"] != "old" { + t.Fatalf("xrange: %v", fwd) + } + rev := postJSON(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "xrevrange", "name": name, + "args": map[string]any{"start": "-", "end": "+", "count": 1}, + }) + rents := resultEntries(rev) + if len(rents) != 1 || rents[0]["id"] != id2 || rents[0]["payload"] != "new" { + t.Fatalf("xrevrange: %v", rev) + } +} + +func TestLabStreamWrongVerb(t *testing.T) { + lab := startTestLab(t) + code, body := postJSONStatus(t, lab, "/v1/op", map[string]any{ + "ks": "stream", "op": "get", "name": "logs", + }) + if code != http.StatusBadRequest { + t.Fatalf("status %d body=%s", code, body) + } + var resp map[string]any + if err := json.Unmarshal(body, &resp); err != nil { + t.Fatal(err) + } + if inv, _ := resp["invalid_argument"].(bool); !inv { + t.Fatalf("want invalid_argument: %v", resp) + } +} + +func resultMap(resp map[string]any) map[string]any { + m, _ := resp["result"].(map[string]any) + if m == nil { + return map[string]any{} + } + return m +} + +func resultEntries(resp map[string]any) []map[string]any { + raw, _ := resultMap(resp)["entries"].([]any) + out := make([]map[string]any, 0, len(raw)) + for _, v := range raw { + m, _ := v.(map[string]any) + out = append(out, m) + } + return out +} + func TestLabHoldFalse(t *testing.T) { var buf bytes.Buffer if err := runWalkthrough(&buf); err != nil { diff --git a/examples/lab/op.go b/examples/lab/op.go index 7517086..df67193 100644 --- a/examples/lab/op.go +++ b/examples/lab/op.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net/http" + "strconv" "strings" "time" @@ -21,27 +22,30 @@ type opReq struct { } type opArgs struct { - Value string `json:"value"` - Item string `json:"item"` - Member string `json:"member"` - Field string `json:"field"` - Path string `json:"path"` - A string `json:"a"` - B string `json:"b"` - Score float64 `json:"score"` - Delta int64 `json:"delta"` - Offset uint64 `json:"offset"` - Bit *bool `json:"bit"` - Lon float64 `json:"lon"` - Lat float64 `json:"lat"` - Radius float64 `json:"radius"` - Limit int `json:"limit"` - Start int `json:"start"` - Stop *int `json:"stop"` - End *int `json:"end"` - K int `json:"k"` - N uint64 `json:"n"` - Vec []float32 `json:"vec"` + Value string `json:"value"` + Item string `json:"item"` + Member string `json:"member"` + Field string `json:"field"` + Path string `json:"path"` + A string `json:"a"` + B string `json:"b"` + Score float64 `json:"score"` + Delta int64 `json:"delta"` + Offset uint64 `json:"offset"` + Bit *bool `json:"bit"` + Lon float64 `json:"lon"` + Lat float64 `json:"lat"` + Radius float64 `json:"radius"` + Limit int `json:"limit"` + Start json.RawMessage `json:"start"` + Stop *int `json:"stop"` + End json.RawMessage `json:"end"` + K int `json:"k"` + N uint64 `json:"n"` + Vec []float32 `json:"vec"` + ID string `json:"id"` + Count int `json:"count"` + MaxLen int `json:"max_len"` } func (l *Lab) runOp(ctx context.Context, req opReq) (map[string]any, int) { @@ -171,7 +175,8 @@ func isWriteOp(op string) bool { case "put", "delete", "bloomadd", "sadd", "srem", "zadd", "zrem", "geoadd", "georem", "lpush", "rpush", "lpop", "rpop", "hset", "hdel", "incr", "jsonset", "jsondel", - "bitset", "hlladd", "topkadd", "cmsincr", "vadd", "vrem": + "bitset", "hlladd", "topkadd", "cmsincr", "vadd", "vrem", + "xadd", "xdel", "xtrim": return true } return false @@ -182,10 +187,8 @@ func dispatch(ctx context.Context, cli *client.Client, ks, op, name string, a op if a.Stop != nil { stop = *a.Stop } - end := -1 - if a.End != nil { - end = *a.End - } + start := asInt(a.Start, 0) + end := asInt(a.End, -1) bit := true if a.Bit != nil { bit = *a.Bit @@ -242,7 +245,7 @@ func dispatch(ctx context.Context, cli *client.Client, ks, op, name string, a op n, err := cli.ZCard(ctx, ks, name) return map[string]any{"card": n}, err case "zrange": - ms, err := cli.ZRange(ctx, ks, name, a.Start, stop) + ms, err := cli.ZRange(ctx, ks, name, start, stop) return zMembersJSON(ms), err case "geoadd": return map[string]any{"acked": true}, cli.GeoAdd(ctx, ks, name, []byte(a.Member), a.Lon, a.Lat) @@ -278,10 +281,10 @@ func dispatch(ctx context.Context, cli *client.Client, ks, op, name string, a op n, err := cli.LLen(ctx, ks, name) return map[string]any{"len": n}, err case "lindex": - v, ok, err := cli.LIndex(ctx, ks, name, a.Start) + v, ok, err := cli.LIndex(ctx, ks, name, start) return map[string]any{"value": string(v), "present": ok}, err case "lrange": - ms, err := cli.LRange(ctx, ks, name, a.Start, stop) + ms, err := cli.LRange(ctx, ks, name, start, stop) return map[string]any{"items": asStrings(ms)}, err case "hset": return map[string]any{"acked": true}, cli.HSet(ctx, ks, name, []byte(a.Field), []byte(a.Value)) @@ -322,10 +325,10 @@ func dispatch(ctx context.Context, cli *client.Client, ks, op, name string, a op b, ok, err := cli.BitGet(ctx, ks, name, a.Offset) return map[string]any{"bit": b, "present": ok}, err case "bitcount": - n, err := cli.BitCount(ctx, ks, name, a.Start, end) + n, err := cli.BitCount(ctx, ks, name, start, end) return map[string]any{"count": n}, err case "bitpos": - pos, ok, err := cli.BitPos(ctx, ks, name, bit, a.Start, end) + pos, ok, err := cli.BitPos(ctx, ks, name, bit, start, end) return map[string]any{"pos": pos, "found": ok}, err case "hlladd": return map[string]any{"acked": true}, cli.HLLAdd(ctx, ks, name, []byte(a.Item)) @@ -366,11 +369,67 @@ func dispatch(ctx context.Context, cli *client.Client, ks, op, name string, a op case "vemb": v, ok, err := cli.VEmb(ctx, ks, name, []byte(a.Member)) return map[string]any{"vec": v, "present": ok}, err + case "xadd": + id, err := cli.XAdd(ctx, ks, name, []byte(a.Value)) + return map[string]any{"id": id}, err + case "xrange": + rows, err := cli.XRange(ctx, ks, name, asBound(a.Start, "-"), asBound(a.End, "+"), a.Count) + return streamJSON(rows), err + case "xrevrange": + rows, err := cli.XRevRange(ctx, ks, name, asBound(a.Start, "-"), asBound(a.End, "+"), a.Count) + return streamJSON(rows), err + case "xlen": + n, ok, err := cli.XLen(ctx, ks, name) + return map[string]any{"n": n, "present": ok}, err + case "xdel": + return map[string]any{"acked": true}, cli.XDel(ctx, ks, name, a.ID) + case "xtrim": + return map[string]any{"acked": true}, cli.XTrim(ctx, ks, name, a.MaxLen) default: return nil, fmt.Errorf("%w: unknown op %q", engine.ErrInvalidArgument, op) } } +func asInt(raw json.RawMessage, def int) int { + if len(raw) == 0 { + return def + } + var n int + if json.Unmarshal(raw, &n) == nil { + return n + } + var s string + if json.Unmarshal(raw, &s) == nil { + if n, err := strconv.Atoi(s); err == nil { + return n + } + } + return def +} + +func asBound(raw json.RawMessage, def string) string { + if len(raw) == 0 { + return def + } + var s string + if json.Unmarshal(raw, &s) == nil && s != "" { + return s + } + var n int + if json.Unmarshal(raw, &n) == nil { + return strconv.Itoa(n) + } + return def +} + +func streamJSON(rows []engine.StreamEntry) map[string]any { + out := make([]map[string]any, 0, len(rows)) + for _, r := range rows { + out = append(out, map[string]any{"id": r.ID, "payload": string(r.Payload)}) + } + return map[string]any{"entries": out} +} + func asStrings(in [][]byte) []string { out := make([]string, len(in)) for i, b := range in { diff --git a/examples/lab/scene.go b/examples/lab/scene.go index e82b12b..f90dbad 100644 --- a/examples/lab/scene.go +++ b/examples/lab/scene.go @@ -8,7 +8,7 @@ import ( var demoNames = []string{ "session", "chart", "users", "flags", "board", "places", "inbox", - "profile", "rl", "doc", "seen", "uniques", "hot", "freq", "items", + "profile", "rl", "doc", "seen", "uniques", "hot", "freq", "items", "logs", } type sceneStep struct { @@ -132,6 +132,12 @@ func sceneOps(id string) ([]opReq, string, error) { mustOp("vectorset", "vadd", "items", "", map[string]any{"member": "north", "vec": []float32{0, 1}}), mustOp("vectorset", "vsim", "items", "", map[string]any{"vec": []float32{1, 0.05}, "k": 2}), }, "Brute-force K-NN. Metric is a keyspace knob, not a query argument.", nil + case "stream": + return []opReq{ + mustOp("stream", "xadd", "logs", "", map[string]any{"value": "hello"}), + mustOp("stream", "xadd", "logs", "", map[string]any{"value": "world"}), + mustOp("stream", "xrange", "logs", "", map[string]any{"start": "-", "end": "+", "count": 0}), + }, "Append-only log. XAdd returns a millis-seq id; replicas get a full snapshot.", nil default: return nil, "", fmt.Errorf("unknown scene %q", id) } diff --git a/examples/lab/ui/dist/assets/index-CkCcC2Cr.js b/examples/lab/ui/dist/assets/index-PAkfW113.js similarity index 51% rename from examples/lab/ui/dist/assets/index-CkCcC2Cr.js rename to examples/lab/ui/dist/assets/index-PAkfW113.js index 1b44998..657f488 100644 --- a/examples/lab/ui/dist/assets/index-CkCcC2Cr.js +++ b/examples/lab/ui/dist/assets/index-PAkfW113.js @@ -1,4 +1,4 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function uc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Gu={exports:{}},rl={},Xu={exports:{}},M={};/** +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))r(l);new MutationObserver(l=>{for(const o of l)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(l){const o={};return l.integrity&&(o.integrity=l.integrity),l.referrerPolicy&&(o.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?o.credentials="include":l.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(l){if(l.ep)return;l.ep=!0;const o=n(l);fetch(l.href,o)}})();function uc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Yu={exports:{}},rl={},Gu={exports:{}},M={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Jn=Symbol.for("react.element"),sc=Symbol.for("react.portal"),ac=Symbol.for("react.fragment"),cc=Symbol.for("react.strict_mode"),fc=Symbol.for("react.profiler"),dc=Symbol.for("react.provider"),pc=Symbol.for("react.context"),hc=Symbol.for("react.forward_ref"),mc=Symbol.for("react.suspense"),vc=Symbol.for("react.memo"),gc=Symbol.for("react.lazy"),Fi=Symbol.iterator;function yc(e){return e===null||typeof e!="object"?null:(e=Fi&&e[Fi]||e["@@iterator"],typeof e=="function"?e:null)}var Zu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Ju=Object.assign,qu={};function cn(e,t,n){this.props=e,this.context=t,this.refs=qu,this.updater=n||Zu}cn.prototype.isReactComponent={};cn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): 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")};cn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function bu(){}bu.prototype=cn.prototype;function Bo(e,t,n){this.props=e,this.context=t,this.refs=qu,this.updater=n||Zu}var Wo=Bo.prototype=new bu;Wo.constructor=Bo;Ju(Wo,cn.prototype);Wo.isPureReactComponent=!0;var Ui=Array.isArray,es=Object.prototype.hasOwnProperty,Ho={current:null},ts={key:!0,ref:!0,__self:!0,__source:!0};function ns(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)es.call(t,r)&&!ts.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1>>1,J=E[K];if(0>>1;Kl(xl,O))xtl(rr,xl)?(E[K]=rr,E[xt]=O,K=xt):(E[K]=xl,E[wt]=O,K=wt);else if(xtl(rr,O))E[K]=rr,E[xt]=O,K=xt;else break e}}return T}function l(E,T){var O=E.sortIndex-T.sortIndex;return O!==0?O:E.id-T.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var s=[],c=[],h=1,v=null,m=3,k=!1,y=!1,x=!1,P=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(E){for(var T=n(c);T!==null;){if(T.callback===null)r(c);else if(T.startTime<=E)r(c),T.sortIndex=T.expirationTime,t(s,T);else break;T=n(c)}}function g(E){if(x=!1,p(E),!y)if(n(s)!==null)y=!0,kl(S);else{var T=n(c);T!==null&&wl(g,T.startTime-E)}}function S(E,T){y=!1,x&&(x=!1,d(z),z=-1),k=!0;var O=m;try{for(p(T),v=n(s);v!==null&&(!(v.expirationTime>T)||E&&!R());){var K=v.callback;if(typeof K=="function"){v.callback=null,m=v.priorityLevel;var J=K(v.expirationTime<=T);T=e.unstable_now(),typeof J=="function"?v.callback=J:v===n(s)&&r(s),p(T)}else r(s);v=n(s)}if(v!==null)var nr=!0;else{var wt=n(c);wt!==null&&wl(g,wt.startTime-T),nr=!1}return nr}finally{v=null,m=O,k=!1}}var j=!1,_=null,z=-1,V=5,C=-1;function R(){return!(e.unstable_now()-CE||125K?(E.sortIndex=O,t(c,E),n(s)===null&&E===n(c)&&(x?(d(z),z=-1):x=!0,wl(g,O-K))):(E.sortIndex=J,t(s,E),y||k||(y=!0,kl(S))),E},e.unstable_shouldYield=R,e.unstable_wrapCallback=function(E){var T=m;return function(){var O=m;m=T;try{return E.apply(this,arguments)}finally{m=O}}}})(us);is.exports=us;var Lc=is.exports;/** + */(function(e){function t(_,T){var O=_.length;_.push(T);e:for(;0>>1,J=_[K];if(0>>1;Kl(wl,O))wtl(rr,wl)?(_[K]=rr,_[wt]=O,K=wt):(_[K]=wl,_[kt]=O,K=kt);else if(wtl(rr,O))_[K]=rr,_[wt]=O,K=wt;else break e}}return T}function l(_,T){var O=_.sortIndex-T.sortIndex;return O!==0?O:_.id-T.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,u=i.now();e.unstable_now=function(){return i.now()-u}}var a=[],c=[],h=1,v=null,m=3,x=!1,y=!1,w=!1,L=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,f=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function p(_){for(var T=n(c);T!==null;){if(T.callback===null)r(c);else if(T.startTime<=_)r(c),T.sortIndex=T.expirationTime,t(a,T);else break;T=n(c)}}function g(_){if(w=!1,p(_),!y)if(n(a)!==null)y=!0,xl(S);else{var T=n(c);T!==null&&kl(g,T.startTime-_)}}function S(_,T){y=!1,w&&(w=!1,d(C),C=-1),x=!0;var O=m;try{for(p(T),v=n(a);v!==null&&(!(v.expirationTime>T)||_&&!R());){var K=v.callback;if(typeof K=="function"){v.callback=null,m=v.priorityLevel;var J=K(v.expirationTime<=T);T=e.unstable_now(),typeof J=="function"?v.callback=J:v===n(a)&&r(a),p(T)}else r(a);v=n(a)}if(v!==null)var nr=!0;else{var kt=n(c);kt!==null&&kl(g,kt.startTime-T),nr=!1}return nr}finally{v=null,m=O,x=!1}}var N=!1,P=null,C=-1,F=5,j=-1;function R(){return!(e.unstable_now()-j_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):F=0<_?Math.floor(1e3/_):5},e.unstable_getCurrentPriorityLevel=function(){return m},e.unstable_getFirstCallbackNode=function(){return n(a)},e.unstable_next=function(_){switch(m){case 1:case 2:case 3:var T=3;break;default:T=m}var O=m;m=T;try{return _()}finally{m=O}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(_,T){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var O=m;m=_;try{return T()}finally{m=O}},e.unstable_scheduleCallback=function(_,T,O){var K=e.unstable_now();switch(typeof O=="object"&&O!==null?(O=O.delay,O=typeof O=="number"&&0K?(_.sortIndex=O,t(c,_),n(a)===null&&_===n(c)&&(w?(d(C),C=-1):w=!0,kl(g,O-K))):(_.sortIndex=J,t(a,_),y||x||(y=!0,xl(S))),_},e.unstable_shouldYield=R,e.unstable_wrapCallback=function(_){var T=m;return function(){var O=m;m=T;try{return _.apply(this,arguments)}finally{m=O}}}})(us);is.exports=us;var zc=is.exports;/** * @license React * react-dom.production.min.js * @@ -30,11 +30,11 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Tc=L,Se=Lc;function w(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Xl=Object.prototype.hasOwnProperty,Rc=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ai={},Vi={};function Oc(e){return Xl.call(Vi,e)?!0:Xl.call(Ai,e)?!1:Rc.test(e)?Vi[e]=!0:(Ai[e]=!0,!1)}function Mc(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Ic(e,t,n,r){if(t===null||typeof t>"u"||Mc(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function ce(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var ne={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ne[e]=new ce(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ne[t]=new ce(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ne[e]=new ce(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ne[e]=new ce(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ne[e]=new ce(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ne[e]=new ce(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ne[e]=new ce(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ne[e]=new ce(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ne[e]=new ce(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ko=/[\-:]([a-z])/g;function Yo(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ko,Yo);ne[t]=new ce(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ko,Yo);ne[t]=new ce(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ko,Yo);ne[t]=new ce(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ne[e]=new ce(e,1,!1,e.toLowerCase(),null,!1,!1)});ne.xlinkHref=new ce("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ne[e]=new ce(e,1,!1,e.toLowerCase(),null,!0,!0)});function Go(e,t,n,r){var l=ne.hasOwnProperty(t)?ne[t]:null;(l!==null?l.type!==0:r||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Gl=Object.prototype.hasOwnProperty,Rc=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ai={},Vi={};function Oc(e){return Gl.call(Vi,e)?!0:Gl.call(Ai,e)?!1:Rc.test(e)?Vi[e]=!0:(Ai[e]=!0,!1)}function Mc(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Ic(e,t,n,r){if(t===null||typeof t>"u"||Mc(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function de(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var ne={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ne[e]=new de(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ne[t]=new de(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ne[e]=new de(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ne[e]=new de(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ne[e]=new de(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ne[e]=new de(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ne[e]=new de(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ne[e]=new de(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ne[e]=new de(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ko=/[\-:]([a-z])/g;function Xo(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ko,Xo);ne[t]=new de(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ko,Xo);ne[t]=new de(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ko,Xo);ne[t]=new de(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ne[e]=new de(e,1,!1,e.toLowerCase(),null,!1,!1)});ne.xlinkHref=new de("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ne[e]=new de(e,1,!1,e.toLowerCase(),null,!0,!0)});function Yo(e,t,n,r){var l=ne.hasOwnProperty(t)?ne[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` -`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{jl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?xn(e):""}function Dc(e){switch(e.tag){case 5:return xn(e.type);case 16:return xn("Lazy");case 13:return xn("Suspense");case 19:return xn("SuspenseList");case 0:case 2:case 15:return e=Nl(e.type,!1),e;case 11:return e=Nl(e.type.render,!1),e;case 1:return e=Nl(e.type,!0),e;default:return""}}function bl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ut:return"Fragment";case Ft:return"Portal";case Zl:return"Profiler";case Xo:return"StrictMode";case Jl:return"Suspense";case ql:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case cs:return(e.displayName||"Context")+".Consumer";case as:return(e._context.displayName||"Context")+".Provider";case Zo:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Jo:return t=e.displayName||null,t!==null?t:bl(e.type)||"Memo";case et:t=e._payload,e=e._init;try{return bl(e(t))}catch{}}return null}function Fc(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return bl(t);case 8:return t===Xo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ht(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ds(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Uc(e){var t=ds(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ir(e){e._valueTracker||(e._valueTracker=Uc(e))}function ps(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ds(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Or(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function eo(e,t){var n=t.checked;return H({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Wi(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ht(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function hs(e,t){t=t.checked,t!=null&&Go(e,"checked",t,!1)}function to(e,t){hs(e,t);var n=ht(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?no(e,t.type,n):t.hasOwnProperty("defaultValue")&&no(e,t.type,ht(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Hi(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function no(e,t,n){(t!=="number"||Or(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Sn=Array.isArray;function Zt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=ur.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function In(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Nn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},$c=["Webkit","ms","Moz","O"];Object.keys(Nn).forEach(function(e){$c.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Nn[t]=Nn[e]})});function ys(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Nn.hasOwnProperty(e)&&Nn[e]?(""+t).trim():t+"px"}function ks(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=ys(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Ac=H({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function oo(e,t){if(t){if(Ac[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(w(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(w(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(w(61))}if(t.style!=null&&typeof t.style!="object")throw Error(w(62))}}function io(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uo=null;function qo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var so=null,Jt=null,qt=null;function Yi(e){if(e=er(e)){if(typeof so!="function")throw Error(w(280));var t=e.stateNode;t&&(t=sl(t),so(e.stateNode,e.type,t))}}function ws(e){Jt?qt?qt.push(e):qt=[e]:Jt=e}function xs(){if(Jt){var e=Jt,t=qt;if(qt=Jt=null,Yi(e),t)for(e=0;e>>=0,e===0?32:31-(Jc(e)/qc|0)|0}var sr=64,ar=4194304;function Cn(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Fr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Cn(u):(o&=i,o!==0&&(r=Cn(o)))}else i=n&~l,i!==0?r=Cn(i):o!==0&&(r=Cn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function qn(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ie(t),e[t]=n}function nf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=_n),nu=" ",ru=!1;function Vs(e,t){switch(e){case"keyup":return Tf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Bs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var $t=!1;function Of(e,t){switch(e){case"compositionend":return Bs(t);case"keypress":return t.which!==32?null:(ru=!0,nu);case"textInput":return e=t.data,e===nu&&ru?null:e;default:return null}}function Mf(e,t){if($t)return e==="compositionend"||!ii&&Vs(e,t)?(e=$s(),jr=ri=lt=null,$t=!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}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=uu(n)}}function Ks(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ks(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Ys(){for(var e=window,t=Or();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Or(e.document)}return t}function ui(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")}function Wf(e){var t=Ys(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Ks(n.ownerDocument.documentElement,n)){if(r!==null&&ui(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=su(n,o);var i=su(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,At=null,mo=null,zn=null,vo=!1;function au(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;vo||At==null||At!==Or(r)||(r=At,"selectionStart"in r&&ui(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}),zn&&Vn(zn,r)||(zn=r,r=Ar(mo,"onSelect"),0Wt||(e.current=So[Wt],So[Wt]=null,Wt--)}function F(e,t){Wt++,So[Wt]=e.current,e.current=t}var mt={},ie=gt(mt),ve=gt(!1),zt=mt;function rn(e,t){var n=e.type.contextTypes;if(!n)return mt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ge(e){return e=e.childContextTypes,e!=null}function Br(){$(ve),$(ie)}function vu(e,t,n){if(ie.current!==mt)throw Error(w(168));F(ie,t),F(ve,n)}function na(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(w(108,Fc(e)||"Unknown",l));return H({},n,r)}function Wr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||mt,zt=ie.current,F(ie,e),F(ve,ve.current),!0}function gu(e,t,n){var r=e.stateNode;if(!r)throw Error(w(169));n?(e=na(e,t,zt),r.__reactInternalMemoizedMergedChildContext=e,$(ve),$(ie),F(ie,e)):$(ve),F(ve,n)}var He=null,al=!1,$l=!1;function ra(e){He===null?He=[e]:He.push(e)}function td(e){al=!0,ra(e)}function yt(){if(!$l&&He!==null){$l=!0;var e=0,t=D;try{var n=He;for(D=1;e>=i,l-=i,Qe=1<<32-Ie(t)+l|n<z?(V=_,_=null):V=_.sibling;var C=m(d,_,p[z],g);if(C===null){_===null&&(_=V);break}e&&_&&C.alternate===null&&t(d,_),f=o(C,f,z),j===null?S=C:j.sibling=C,j=C,_=V}if(z===p.length)return n(d,_),A&&St(d,z),S;if(_===null){for(;zz?(V=_,_=null):V=_.sibling;var R=m(d,_,C.value,g);if(R===null){_===null&&(_=V);break}e&&_&&R.alternate===null&&t(d,_),f=o(R,f,z),j===null?S=R:j.sibling=R,j=R,_=V}if(C.done)return n(d,_),A&&St(d,z),S;if(_===null){for(;!C.done;z++,C=p.next())C=v(d,C.value,g),C!==null&&(f=o(C,f,z),j===null?S=C:j.sibling=C,j=C);return A&&St(d,z),S}for(_=r(d,_);!C.done;z++,C=p.next())C=k(_,d,z,C.value,g),C!==null&&(e&&C.alternate!==null&&_.delete(C.key===null?z:C.key),f=o(C,f,z),j===null?S=C:j.sibling=C,j=C);return e&&_.forEach(function(pe){return t(d,pe)}),A&&St(d,z),S}function P(d,f,p,g){if(typeof p=="object"&&p!==null&&p.type===Ut&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case or:e:{for(var S=p.key,j=f;j!==null;){if(j.key===S){if(S=p.type,S===Ut){if(j.tag===7){n(d,j.sibling),f=l(j,p.props.children),f.return=d,d=f;break e}}else if(j.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===et&&wu(S)===j.type){n(d,j.sibling),f=l(j,p.props),f.ref=yn(d,j,p),f.return=d,d=f;break e}n(d,j);break}else t(d,j);j=j.sibling}p.type===Ut?(f=Pt(p.props.children,d.mode,g,p.key),f.return=d,d=f):(g=Rr(p.type,p.key,p.props,null,d.mode,g),g.ref=yn(d,f,p),g.return=d,d=g)}return i(d);case Ft:e:{for(j=p.key;f!==null;){if(f.key===j)if(f.tag===4&&f.stateNode.containerInfo===p.containerInfo&&f.stateNode.implementation===p.implementation){n(d,f.sibling),f=l(f,p.children||[]),f.return=d,d=f;break e}else{n(d,f);break}else t(d,f);f=f.sibling}f=Yl(p,d.mode,g),f.return=d,d=f}return i(d);case et:return j=p._init,P(d,f,j(p._payload),g)}if(Sn(p))return y(d,f,p,g);if(pn(p))return x(d,f,p,g);vr(d,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,f!==null&&f.tag===6?(n(d,f.sibling),f=l(f,p),f.return=d,d=f):(n(d,f),f=Kl(p,d.mode,g),f.return=d,d=f),i(d)):n(d,f)}return P}var on=ua(!0),sa=ua(!1),Kr=gt(null),Yr=null,Kt=null,fi=null;function di(){fi=Kt=Yr=null}function pi(e){var t=Kr.current;$(Kr),e._currentValue=t}function No(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function en(e,t){Yr=e,fi=Kt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(me=!0),e.firstContext=null)}function ze(e){var t=e._currentValue;if(fi!==e)if(e={context:e,memoizedValue:t,next:null},Kt===null){if(Yr===null)throw Error(w(308));Kt=e,Yr.dependencies={lanes:0,firstContext:e}}else Kt=Kt.next=e;return t}var Nt=null;function hi(e){Nt===null?Nt=[e]:Nt.push(e)}function aa(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,hi(t)):(n.next=l.next,l.next=n),t.interleaved=n,Ze(e,r)}function Ze(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var tt=!1;function mi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ca(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ye(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ct(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,I&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Ze(e,n)}return l=r.interleaved,l===null?(t.next=t,hi(r)):(t.next=l.next,l.next=t),r.interleaved=t,Ze(e,n)}function Er(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ei(e,n)}}function xu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Gr(e,t,n,r){var l=e.updateQueue;tt=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var h=e.alternate;h!==null&&(h=h.updateQueue,u=h.lastBaseUpdate,u!==i&&(u===null?h.firstBaseUpdate=c:u.next=c,h.lastBaseUpdate=s))}if(o!==null){var v=l.baseState;i=0,h=c=s=null,u=o;do{var m=u.lane,k=u.eventTime;if((r&m)===m){h!==null&&(h=h.next={eventTime:k,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var y=e,x=u;switch(m=t,k=n,x.tag){case 1:if(y=x.payload,typeof y=="function"){v=y.call(k,v,m);break e}v=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=x.payload,m=typeof y=="function"?y.call(k,v,m):y,m==null)break e;v=H({},v,m);break e;case 2:tt=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,m=l.effects,m===null?l.effects=[u]:m.push(u))}else k={eventTime:k,lane:m,tag:u.tag,payload:u.payload,callback:u.callback,next:null},h===null?(c=h=k,s=v):h=h.next=k,i|=m;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;m=u,u=m.next,m.next=null,l.lastBaseUpdate=m,l.shared.pending=null}}while(!0);if(h===null&&(s=v),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=h,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Rt|=i,e.lanes=i,e.memoizedState=v}}function Su(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Vl.transition;Vl.transition={};try{e(!1),t()}finally{D=n,Vl.transition=r}}function _a(){return Le().memoizedState}function od(e,t,n){var r=dt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Pa(e))za(t,n);else if(n=aa(e,t,n,r),n!==null){var l=se();De(n,e,r,l),La(n,t,r)}}function id(e,t,n){var r=dt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Pa(e))za(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Fe(u,i)){var s=t.interleaved;s===null?(l.next=l,hi(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=aa(e,t,l,r),n!==null&&(l=se(),De(n,e,r,l),La(n,t,r))}}function Pa(e){var t=e.alternate;return e===W||t!==null&&t===W}function za(e,t){Ln=Zr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function La(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ei(e,n)}}var Jr={readContext:ze,useCallback:re,useContext:re,useEffect:re,useImperativeHandle:re,useInsertionEffect:re,useLayoutEffect:re,useMemo:re,useReducer:re,useRef:re,useState:re,useDebugValue:re,useDeferredValue:re,useTransition:re,useMutableSource:re,useSyncExternalStore:re,useId:re,unstable_isNewReconciler:!1},ud={readContext:ze,useCallback:function(e,t){return $e().memoizedState=[e,t===void 0?null:t],e},useContext:ze,useEffect:ju,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Pr(4194308,4,Sa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Pr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Pr(4,2,e,t)},useMemo:function(e,t){var n=$e();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=$e();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=od.bind(null,W,e),[r.memoizedState,e]},useRef:function(e){var t=$e();return e={current:e},t.memoizedState=e},useState:Cu,useDebugValue:Ci,useDeferredValue:function(e){return $e().memoizedState=e},useTransition:function(){var e=Cu(!1),t=e[0];return e=ld.bind(null,e[1]),$e().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=W,l=$e();if(A){if(n===void 0)throw Error(w(407));n=n()}else{if(n=t(),b===null)throw Error(w(349));Tt&30||ha(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,ju(va.bind(null,r,o,e),[e]),r.flags|=2048,Xn(9,ma.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=$e(),t=b.identifierPrefix;if(A){var n=Ke,r=Qe;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Yn++,0u||l[i]!==o[u]){var a=` +`+l[i].replace(" at new "," at ");return e.displayName&&a.includes("")&&(a=a.replace("",e.displayName)),a}while(1<=i&&0<=u);break}}}finally{Cl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?wn(e):""}function Dc(e){switch(e.tag){case 5:return wn(e.type);case 16:return wn("Lazy");case 13:return wn("Suspense");case 19:return wn("SuspenseList");case 0:case 2:case 15:return e=Nl(e.type,!1),e;case 11:return e=Nl(e.type.render,!1),e;case 1:return e=Nl(e.type,!0),e;default:return""}}function bl(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Ut:return"Fragment";case Ft:return"Portal";case Zl:return"Profiler";case Go:return"StrictMode";case Jl:return"Suspense";case ql:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case cs:return(e.displayName||"Context")+".Consumer";case as:return(e._context.displayName||"Context")+".Provider";case Zo:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Jo:return t=e.displayName||null,t!==null?t:bl(e.type)||"Memo";case et:t=e._payload,e=e._init;try{return bl(e(t))}catch{}}return null}function Fc(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return bl(t);case 8:return t===Go?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ht(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ds(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Uc(e){var t=ds(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ir(e){e._valueTracker||(e._valueTracker=Uc(e))}function ps(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ds(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Or(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function eo(e,t){var n=t.checked;return H({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Wi(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ht(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function hs(e,t){t=t.checked,t!=null&&Yo(e,"checked",t,!1)}function to(e,t){hs(e,t);var n=ht(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?no(e,t.type,n):t.hasOwnProperty("defaultValue")&&no(e,t.type,ht(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Hi(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function no(e,t,n){(t!=="number"||Or(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Sn=Array.isArray;function Zt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=ur.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function In(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Nn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},$c=["Webkit","ms","Moz","O"];Object.keys(Nn).forEach(function(e){$c.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Nn[t]=Nn[e]})});function ys(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Nn.hasOwnProperty(e)&&Nn[e]?(""+t).trim():t+"px"}function xs(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=ys(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var Ac=H({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function oo(e,t){if(t){if(Ac[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(k(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(k(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(k(61))}if(t.style!=null&&typeof t.style!="object")throw Error(k(62))}}function io(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var uo=null;function qo(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var so=null,Jt=null,qt=null;function Xi(e){if(e=er(e)){if(typeof so!="function")throw Error(k(280));var t=e.stateNode;t&&(t=sl(t),so(e.stateNode,e.type,t))}}function ks(e){Jt?qt?qt.push(e):qt=[e]:Jt=e}function ws(){if(Jt){var e=Jt,t=qt;if(qt=Jt=null,Xi(e),t)for(e=0;e>>=0,e===0?32:31-(Jc(e)/qc|0)|0}var sr=64,ar=4194304;function jn(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Fr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=jn(u):(o&=i,o!==0&&(r=jn(o)))}else i=n&~l,i!==0?r=jn(i):o!==0&&(r=jn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function qn(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ie(t),e[t]=n}function nf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=_n),nu=" ",ru=!1;function Vs(e,t){switch(e){case"keyup":return Tf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Bs(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var $t=!1;function Of(e,t){switch(e){case"compositionend":return Bs(t);case"keypress":return t.which!==32?null:(ru=!0,nu);case"textInput":return e=t.data,e===nu&&ru?null:e;default:return null}}function Mf(e,t){if($t)return e==="compositionend"||!ii&&Vs(e,t)?(e=$s(),Cr=ri=lt=null,$t=!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}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=uu(n)}}function Ks(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ks(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Xs(){for(var e=window,t=Or();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Or(e.document)}return t}function ui(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")}function Wf(e){var t=Xs(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Ks(n.ownerDocument.documentElement,n)){if(r!==null&&ui(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=su(n,o);var i=su(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,At=null,mo=null,Ln=null,vo=!1;function au(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;vo||At==null||At!==Or(r)||(r=At,"selectionStart"in r&&ui(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}),Ln&&Vn(Ln,r)||(Ln=r,r=Ar(mo,"onSelect"),0Wt||(e.current=So[Wt],So[Wt]=null,Wt--)}function U(e,t){Wt++,So[Wt]=e.current,e.current=t}var mt={},ie=gt(mt),ve=gt(!1),Lt=mt;function rn(e,t){var n=e.type.contextTypes;if(!n)return mt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ge(e){return e=e.childContextTypes,e!=null}function Br(){A(ve),A(ie)}function vu(e,t,n){if(ie.current!==mt)throw Error(k(168));U(ie,t),U(ve,n)}function na(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(k(108,Fc(e)||"Unknown",l));return H({},n,r)}function Wr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||mt,Lt=ie.current,U(ie,e),U(ve,ve.current),!0}function gu(e,t,n){var r=e.stateNode;if(!r)throw Error(k(169));n?(e=na(e,t,Lt),r.__reactInternalMemoizedMergedChildContext=e,A(ve),A(ie),U(ie,e)):A(ve),U(ve,n)}var He=null,al=!1,$l=!1;function ra(e){He===null?He=[e]:He.push(e)}function td(e){al=!0,ra(e)}function yt(){if(!$l&&He!==null){$l=!0;var e=0,t=D;try{var n=He;for(D=1;e>=i,l-=i,Qe=1<<32-Ie(t)+l|n<C?(F=P,P=null):F=P.sibling;var j=m(d,P,p[C],g);if(j===null){P===null&&(P=F);break}e&&P&&j.alternate===null&&t(d,P),f=o(j,f,C),N===null?S=j:N.sibling=j,N=j,P=F}if(C===p.length)return n(d,P),V&&St(d,C),S;if(P===null){for(;CC?(F=P,P=null):F=P.sibling;var R=m(d,P,j.value,g);if(R===null){P===null&&(P=F);break}e&&P&&R.alternate===null&&t(d,P),f=o(R,f,C),N===null?S=R:N.sibling=R,N=R,P=F}if(j.done)return n(d,P),V&&St(d,C),S;if(P===null){for(;!j.done;C++,j=p.next())j=v(d,j.value,g),j!==null&&(f=o(j,f,C),N===null?S=j:N.sibling=j,N=j);return V&&St(d,C),S}for(P=r(d,P);!j.done;C++,j=p.next())j=x(P,d,C,j.value,g),j!==null&&(e&&j.alternate!==null&&P.delete(j.key===null?C:j.key),f=o(j,f,C),N===null?S=j:N.sibling=j,N=j);return e&&P.forEach(function(pe){return t(d,pe)}),V&&St(d,C),S}function L(d,f,p,g){if(typeof p=="object"&&p!==null&&p.type===Ut&&p.key===null&&(p=p.props.children),typeof p=="object"&&p!==null){switch(p.$$typeof){case or:e:{for(var S=p.key,N=f;N!==null;){if(N.key===S){if(S=p.type,S===Ut){if(N.tag===7){n(d,N.sibling),f=l(N,p.props.children),f.return=d,d=f;break e}}else if(N.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===et&&ku(S)===N.type){n(d,N.sibling),f=l(N,p.props),f.ref=yn(d,N,p),f.return=d,d=f;break e}n(d,N);break}else t(d,N);N=N.sibling}p.type===Ut?(f=Pt(p.props.children,d.mode,g,p.key),f.return=d,d=f):(g=Rr(p.type,p.key,p.props,null,d.mode,g),g.ref=yn(d,f,p),g.return=d,d=g)}return i(d);case Ft:e:{for(N=p.key;f!==null;){if(f.key===N)if(f.tag===4&&f.stateNode.containerInfo===p.containerInfo&&f.stateNode.implementation===p.implementation){n(d,f.sibling),f=l(f,p.children||[]),f.return=d,d=f;break e}else{n(d,f);break}else t(d,f);f=f.sibling}f=Xl(p,d.mode,g),f.return=d,d=f}return i(d);case et:return N=p._init,L(d,f,N(p._payload),g)}if(Sn(p))return y(d,f,p,g);if(pn(p))return w(d,f,p,g);vr(d,p)}return typeof p=="string"&&p!==""||typeof p=="number"?(p=""+p,f!==null&&f.tag===6?(n(d,f.sibling),f=l(f,p),f.return=d,d=f):(n(d,f),f=Kl(p,d.mode,g),f.return=d,d=f),i(d)):n(d,f)}return L}var on=ua(!0),sa=ua(!1),Kr=gt(null),Xr=null,Kt=null,fi=null;function di(){fi=Kt=Xr=null}function pi(e){var t=Kr.current;A(Kr),e._currentValue=t}function No(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function en(e,t){Xr=e,fi=Kt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(me=!0),e.firstContext=null)}function Le(e){var t=e._currentValue;if(fi!==e)if(e={context:e,memoizedValue:t,next:null},Kt===null){if(Xr===null)throw Error(k(308));Kt=e,Xr.dependencies={lanes:0,firstContext:e}}else Kt=Kt.next=e;return t}var Nt=null;function hi(e){Nt===null?Nt=[e]:Nt.push(e)}function aa(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,hi(t)):(n.next=l.next,l.next=n),t.interleaved=n,Ze(e,r)}function Ze(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var tt=!1;function mi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ca(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Xe(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ct(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,I&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Ze(e,n)}return l=r.interleaved,l===null?(t.next=t,hi(r)):(t.next=l.next,l.next=t),r.interleaved=t,Ze(e,n)}function Er(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ei(e,n)}}function wu(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Yr(e,t,n,r){var l=e.updateQueue;tt=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var a=u,c=a.next;a.next=null,i===null?o=c:i.next=c,i=a;var h=e.alternate;h!==null&&(h=h.updateQueue,u=h.lastBaseUpdate,u!==i&&(u===null?h.firstBaseUpdate=c:u.next=c,h.lastBaseUpdate=a))}if(o!==null){var v=l.baseState;i=0,h=c=a=null,u=o;do{var m=u.lane,x=u.eventTime;if((r&m)===m){h!==null&&(h=h.next={eventTime:x,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var y=e,w=u;switch(m=t,x=n,w.tag){case 1:if(y=w.payload,typeof y=="function"){v=y.call(x,v,m);break e}v=y;break e;case 3:y.flags=y.flags&-65537|128;case 0:if(y=w.payload,m=typeof y=="function"?y.call(x,v,m):y,m==null)break e;v=H({},v,m);break e;case 2:tt=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,m=l.effects,m===null?l.effects=[u]:m.push(u))}else x={eventTime:x,lane:m,tag:u.tag,payload:u.payload,callback:u.callback,next:null},h===null?(c=h=x,a=v):h=h.next=x,i|=m;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;m=u,u=m.next,m.next=null,l.lastBaseUpdate=m,l.shared.pending=null}}while(!0);if(h===null&&(a=v),l.baseState=a,l.firstBaseUpdate=c,l.lastBaseUpdate=h,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Rt|=i,e.lanes=i,e.memoizedState=v}}function Su(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Vl.transition;Vl.transition={};try{e(!1),t()}finally{D=n,Vl.transition=r}}function _a(){return ze().memoizedState}function od(e,t,n){var r=dt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Pa(e))La(t,n);else if(n=aa(e,t,n,r),n!==null){var l=ce();De(n,e,r,l),za(n,t,r)}}function id(e,t,n){var r=dt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Pa(e))La(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,Fe(u,i)){var a=t.interleaved;a===null?(l.next=l,hi(t)):(l.next=a.next,a.next=l),t.interleaved=l;return}}catch{}finally{}n=aa(e,t,l,r),n!==null&&(l=ce(),De(n,e,r,l),za(n,t,r))}}function Pa(e){var t=e.alternate;return e===W||t!==null&&t===W}function La(e,t){zn=Zr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function za(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ei(e,n)}}var Jr={readContext:Le,useCallback:re,useContext:re,useEffect:re,useImperativeHandle:re,useInsertionEffect:re,useLayoutEffect:re,useMemo:re,useReducer:re,useRef:re,useState:re,useDebugValue:re,useDeferredValue:re,useTransition:re,useMutableSource:re,useSyncExternalStore:re,useId:re,unstable_isNewReconciler:!1},ud={readContext:Le,useCallback:function(e,t){return $e().memoizedState=[e,t===void 0?null:t],e},useContext:Le,useEffect:Cu,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Pr(4194308,4,Sa.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Pr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Pr(4,2,e,t)},useMemo:function(e,t){var n=$e();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=$e();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=od.bind(null,W,e),[r.memoizedState,e]},useRef:function(e){var t=$e();return e={current:e},t.memoizedState=e},useState:ju,useDebugValue:ji,useDeferredValue:function(e){return $e().memoizedState=e},useTransition:function(){var e=ju(!1),t=e[0];return e=ld.bind(null,e[1]),$e().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=W,l=$e();if(V){if(n===void 0)throw Error(k(407));n=n()}else{if(n=t(),b===null)throw Error(k(349));Tt&30||ha(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Cu(va.bind(null,r,o,e),[e]),r.flags|=2048,Gn(9,ma.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=$e(),t=b.identifierPrefix;if(V){var n=Ke,r=Qe;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Xn++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ae]=t,e[Hn]=r,Aa(e,t,!1,!1),t.stateNode=e;e:{switch(i=io(n,r),n){case"dialog":U("cancel",e),U("close",e),l=r;break;case"iframe":case"object":case"embed":U("load",e),l=r;break;case"video":case"audio":for(l=0;lan&&(t.flags|=128,r=!0,kn(o,!1),t.lanes=4194304)}else{if(!r)if(e=Xr(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),kn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!A)return le(t),null}else 2*Y()-o.renderingStartTime>an&&n!==1073741824&&(t.flags|=128,r=!0,kn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Y(),t.sibling=null,n=B.current,F(B,r?n&1|2:n&1),t):(le(t),null);case 22:case 23:return zi(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?ke&1073741824&&(le(t),t.subtreeFlags&6&&(t.flags|=8192)):le(t),null;case 24:return null;case 25:return null}throw Error(w(156,t.tag))}function md(e,t){switch(ai(t),t.tag){case 1:return ge(t.type)&&Br(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return un(),$(ve),$(ie),yi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return gi(t),null;case 13:if($(B),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));ln()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return $(B),null;case 4:return un(),null;case 10:return pi(t.type._context),null;case 22:case 23:return zi(),null;case 24:return null;default:return null}}var yr=!1,oe=!1,vd=typeof WeakSet=="function"?WeakSet:Set,N=null;function Yt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Q(e,t,r)}else n.current=null}function Mo(e,t,n){try{n()}catch(r){Q(e,t,r)}}var Iu=!1;function gd(e,t){if(go=Ur,e=Ys(),ui(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,h=0,v=e,m=null;t:for(;;){for(var k;v!==n||l!==0&&v.nodeType!==3||(u=i+l),v!==o||r!==0&&v.nodeType!==3||(s=i+r),v.nodeType===3&&(i+=v.nodeValue.length),(k=v.firstChild)!==null;)m=v,v=k;for(;;){if(v===e)break t;if(m===n&&++c===l&&(u=i),m===o&&++h===r&&(s=i),(k=v.nextSibling)!==null)break;v=m,m=v.parentNode}v=k}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(yo={focusedElem:e,selectionRange:n},Ur=!1,N=t;N!==null;)if(t=N,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,N=e;else for(;N!==null;){t=N;try{var y=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var x=y.memoizedProps,P=y.memoizedState,d=t.stateNode,f=d.getSnapshotBeforeUpdate(t.elementType===t.type?x:Re(t.type,x),P);d.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var p=t.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(g){Q(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,N=e;break}N=t.return}return y=Iu,Iu=!1,y}function Tn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Mo(t,n,o)}l=l.next}while(l!==r)}}function dl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Io(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Wa(e){var t=e.alternate;t!==null&&(e.alternate=null,Wa(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ae],delete t[Hn],delete t[xo],delete t[bf],delete t[ed])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Ha(e){return e.tag===5||e.tag===3||e.tag===4}function Du(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ha(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.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Do(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Vr));else if(r!==4&&(e=e.child,e!==null))for(Do(e,t,n),e=e.sibling;e!==null;)Do(e,t,n),e=e.sibling}function Fo(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&&(e=e.child,e!==null))for(Fo(e,t,n),e=e.sibling;e!==null;)Fo(e,t,n),e=e.sibling}var ee=null,Oe=!1;function be(e,t,n){for(n=n.child;n!==null;)Qa(e,t,n),n=n.sibling}function Qa(e,t,n){if(Ve&&typeof Ve.onCommitFiberUnmount=="function")try{Ve.onCommitFiberUnmount(ll,n)}catch{}switch(n.tag){case 5:oe||Yt(n,t);case 6:var r=ee,l=Oe;ee=null,be(e,t,n),ee=r,Oe=l,ee!==null&&(Oe?(e=ee,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ee.removeChild(n.stateNode));break;case 18:ee!==null&&(Oe?(e=ee,n=n.stateNode,e.nodeType===8?Ul(e.parentNode,n):e.nodeType===1&&Ul(e,n),$n(e)):Ul(ee,n.stateNode));break;case 4:r=ee,l=Oe,ee=n.stateNode.containerInfo,Oe=!0,be(e,t,n),ee=r,Oe=l;break;case 0:case 11:case 14:case 15:if(!oe&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Mo(n,t,i),l=l.next}while(l!==r)}be(e,t,n);break;case 1:if(!oe&&(Yt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Q(n,t,u)}be(e,t,n);break;case 21:be(e,t,n);break;case 22:n.mode&1?(oe=(r=oe)||n.memoizedState!==null,be(e,t,n),oe=r):be(e,t,n);break;default:be(e,t,n)}}function Fu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new vd),t.forEach(function(r){var l=Ed.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Te(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=Y()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*kd(r/1960))-r,10e?16:e,ot===null)var r=!1;else{if(e=ot,ot=null,el=0,I&6)throw Error(w(331));var l=I;for(I|=4,N=e.current;N!==null;){var o=N,i=o.child;if(N.flags&16){var u=o.deletions;if(u!==null){for(var s=0;sY()-_i?_t(e,0):Ei|=n),ye(e,t)}function ba(e,t){t===0&&(e.mode&1?(t=ar,ar<<=1,!(ar&130023424)&&(ar=4194304)):t=1);var n=se();e=Ze(e,t),e!==null&&(qn(e,t,n),ye(e,n))}function Nd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),ba(e,n)}function Ed(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(w(314))}r!==null&&r.delete(t),ba(e,n)}var ec;ec=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ve.current)me=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return me=!1,pd(e,t,n);me=!!(e.flags&131072)}else me=!1,A&&t.flags&1048576&&la(t,Qr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;zr(e,t),e=t.pendingProps;var l=rn(t,ie.current);en(t,n),l=wi(null,t,r,e,l,n);var o=xi();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ge(r)?(o=!0,Wr(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,mi(t),l.updater=fl,t.stateNode=l,l._reactInternals=t,_o(t,r,e,n),t=Lo(null,t,r,!0,o,n)):(t.tag=0,A&&o&&si(t),ue(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(zr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Pd(r),e=Re(r,e),l){case 0:t=zo(null,t,r,e,n);break e;case 1:t=Ru(null,t,r,e,n);break e;case 11:t=Lu(null,t,r,e,n);break e;case 14:t=Tu(null,t,r,Re(r.type,e),n);break e}throw Error(w(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),zo(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Ru(e,t,r,l,n);case 3:e:{if(Fa(t),e===null)throw Error(w(387));r=t.pendingProps,o=t.memoizedState,l=o.element,ca(e,t),Gr(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=sn(Error(w(423)),t),t=Ou(e,t,r,n,l);break e}else if(r!==l){l=sn(Error(w(424)),t),t=Ou(e,t,r,n,l);break e}else for(we=at(t.stateNode.containerInfo.firstChild),xe=t,A=!0,Me=null,n=sa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ln(),r===l){t=Je(e,t,n);break e}ue(e,t,r,n)}t=t.child}return t;case 5:return fa(t),e===null&&jo(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ko(r,l)?i=null:o!==null&&ko(r,o)&&(t.flags|=32),Da(e,t),ue(e,t,i,n),t.child;case 6:return e===null&&jo(t),null;case 13:return Ua(e,t,n);case 4:return vi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=on(t,null,r,n):ue(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Lu(e,t,r,l,n);case 7:return ue(e,t,t.pendingProps,n),t.child;case 8:return ue(e,t,t.pendingProps.children,n),t.child;case 12:return ue(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,F(Kr,r._currentValue),r._currentValue=i,o!==null)if(Fe(o.value,i)){if(o.children===l.children&&!ve.current){t=Je(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Ye(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var h=c.pending;h===null?s.next=s:(s.next=h.next,h.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),No(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(w(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),No(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}ue(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,en(t,n),l=ze(l),r=r(l),t.flags|=1,ue(e,t,r,n),t.child;case 14:return r=t.type,l=Re(r,t.pendingProps),l=Re(r.type,l),Tu(e,t,r,l,n);case 15:return Ma(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),zr(e,t),t.tag=1,ge(r)?(e=!0,Wr(t)):e=!1,en(t,n),Ta(t,r,l),_o(t,r,l,n),Lo(null,t,r,!0,e,n);case 19:return $a(e,t,n);case 22:return Ia(e,t,n)}throw Error(w(156,t.tag))};function tc(e,t){return Ps(e,t)}function _d(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function _e(e,t,n,r){return new _d(e,t,n,r)}function Ti(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Pd(e){if(typeof e=="function")return Ti(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Zo)return 11;if(e===Jo)return 14}return 2}function pt(e,t){var n=e.alternate;return n===null?(n=_e(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Ti(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Ut:return Pt(n.children,l,o,t);case Xo:i=8,l|=8;break;case Zl:return e=_e(12,n,t,l|2),e.elementType=Zl,e.lanes=o,e;case Jl:return e=_e(13,n,t,l),e.elementType=Jl,e.lanes=o,e;case ql:return e=_e(19,n,t,l),e.elementType=ql,e.lanes=o,e;case fs:return hl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case as:i=10;break e;case cs:i=9;break e;case Zo:i=11;break e;case Jo:i=14;break e;case et:i=16,r=null;break e}throw Error(w(130,e==null?e:typeof e,""))}return t=_e(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Pt(e,t,n,r){return e=_e(7,e,r,t),e.lanes=n,e}function hl(e,t,n,r){return e=_e(22,e,r,t),e.elementType=fs,e.lanes=n,e.stateNode={isHidden:!1},e}function Kl(e,t,n){return e=_e(6,e,null,t),e.lanes=n,e}function Yl(e,t,n){return t=_e(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zd(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=_l(0),this.expirationTimes=_l(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=_l(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Ri(e,t,n,r,l,o,i,u,s){return e=new zd(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=_e(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},mi(o),e}function Ld(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(oc)}catch(e){console.error(e)}}oc(),os.exports=Ce;var Id=os.exports,Qu=Id;Gl.createRoot=Qu.createRoot,Gl.hydrateRoot=Qu.hydrateRoot;const Xt=[{id:"anatomy",label:"Anatomy",ks:"cacheonly",name:"session"},{id:"kv-write",label:"KV write",ks:"cacheonly",name:"session"},{id:"loadthrough",label:"LoadThrough",ks:"loadthrough",name:"chart"},{id:"tombstone",label:"Tombstone",ks:"cacheonly",name:"session"},{id:"bloom",label:"Bloom",ks:"bloom",name:"users"},{id:"set",label:"Set",ks:"set",name:"flags"},{id:"zset",label:"ZSet",ks:"zset",name:"board"},{id:"geo",label:"Geo",ks:"geo",name:"places"},{id:"list",label:"List",ks:"list",name:"inbox"},{id:"hash",label:"Hash",ks:"hash",name:"profile"},{id:"counter",label:"Counter",ks:"counter",name:"rl"},{id:"json",label:"JSON",ks:"json",name:"doc"},{id:"bitmap",label:"Bitmap",ks:"bitmap",name:"seen"},{id:"hll",label:"HLL",ks:"hll",name:"uniques"},{id:"topk",label:"TopK",ks:"topk",name:"hot"},{id:"cms",label:"CMS",ks:"cms",name:"freq"},{id:"vectorset",label:"VectorSet",ks:"vectorset",name:"items"}];async function Dd(){const e=await fetch("/v1/cluster");if(!e.ok)throw new Error(await e.text());return e.json()}async function Ku(e){const t=await fetch("/v1/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json();if(!t.ok)throw new Error(n.error||t.statusText);return n}async function Fd(){const e=await fetch("/v1/disconnect",{method:"POST"});if(!e.ok)throw new Error(await e.text());return e.json()}async function Ud(e,t,n){const r=new URLSearchParams({ks:e,name:t,item:n}),l=await fetch(`/v1/bloom?${r}`);if(!l.ok)throw new Error(await l.text());return l.json()}async function $d(e,t){const n=await fetch(`/v1/view?ks=${encodeURIComponent(e)}&key=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(await n.text());return n.json()}async function Ad(e,t,n,r={},l=""){return await(await fetch("/v1/op",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ks:e,op:t,name:n,via:l,args:r})})).json()}async function Vd(e){const t=await fetch(`/v1/scene/${encodeURIComponent(e)}`,{method:"POST"});if(!t.ok)throw new Error(await t.text());return t.json()}async function Bd(e=[]){await fetch("/v1/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({names:e})})}function Wd(){const e=new URLSearchParams(window.location.search).get("chapter");return e&&Xt.some(t=>t.id===e)?e:"anatomy"}function Hd(e){const t=new URL(window.location.href);t.searchParams.set("chapter",e),window.history.replaceState(null,"",t.toString())}function Qd({current:e,onPick:t}){return a.jsx("nav",{className:"nav",children:Xt.map(n=>a.jsx("button",{className:n.id===e?"active":"",onClick:()=>t(n.id),children:n.label},n.id))})}function Kd({cluster:e,view:t,last:n,name:r,setName:l,onRefresh:o}){return a.jsxs("aside",{className:"inspector",children:[a.jsx("h2",{children:"Results"}),a.jsxs("dl",{children:[a.jsx("dt",{children:"name"}),a.jsx("dd",{children:a.jsx("input",{value:r,onChange:i=>l(i.target.value),onBlur:o,placeholder:"key or name, e.g. session"})}),a.jsx("dt",{children:"owner"}),a.jsx("dd",{children:a.jsx("code",{children:(t==null?void 0:t.owner)||"—"})}),a.jsx("dt",{children:"RF"}),a.jsx("dd",{children:(t==null?void 0:t.rf)??(e==null?void 0:e.rf)??"—"}),a.jsx("dt",{children:"ring gen"}),a.jsx("dd",{children:(t==null?void 0:t.ring_gen)??(e==null?void 0:e.ring_gen)??"—"}),a.jsx("dt",{children:"SoT loads"}),a.jsxs("dd",{children:[(e==null?void 0:e.sot_loads)??0," ",a.jsxs("span",{className:"muted",children:["(",e==null?void 0:e.sot_latency,")"]})]})]}),(n==null?void 0:n.trace)&&n.trace.length>0&&a.jsxs(a.Fragment,{children:[a.jsx("h2",{children:"Trace"}),a.jsx("div",{className:"trace",children:n.trace.map(i=>a.jsx("div",{children:i},i))})]}),n&&a.jsxs(a.Fragment,{children:[a.jsx("h2",{children:"Last result"}),n.error&&a.jsx("p",{children:n.invalid_argument?"invalid argument":n.error}),a.jsx("pre",{className:"result",children:JSON.stringify(n.result??n,null,2)})]})]})}function fe({when:e,not:t}){return a.jsxs("p",{className:"note",children:[a.jsx("strong",{children:"Use when"})," ",e," · ",a.jsx("strong",{children:"Not"})," ",t]})}function de({name:e,setName:t,placeholder:n="structure name, e.g. session"}){return a.jsxs("label",{className:"stack",children:["name",a.jsx("input",{value:e,onChange:r=>t(r.target.value),placeholder:n})]})}function Yd({name:e,setName:t,run:n,last:r}){const[l,o]=L.useState(Array(64).fill(!1)),[i,u]=L.useState(0),s=r==null?void 0:r.result;async function c(k,y){(await n("bitset",{offset:k,bit:y})).ok&&(u(k),kP.map((d,f)=>f===k?y:d)))}async function h(k){await c(k,!l[k])}async function v(k=i){u(k),await n("bitget",{offset:k})}async function m(){await n("delete"),o(Array(64).fill(!1))}return a.jsxs("div",{children:[a.jsx(fe,{when:"packed flags / presence bits.",not:"a Bloom filter — this is exact and MSB-first."}),a.jsx(de,{name:e,setName:t,placeholder:"bitmap name, e.g. seen"}),a.jsxs("label",{className:"stack",children:["offset",a.jsx("input",{type:"number",min:0,value:i,onChange:k=>u(Math.max(0,Number(k.target.value)||0)),placeholder:"bit index from 0, e.g. 0"})]}),a.jsxs("div",{className:"stack-actions",children:[a.jsx("button",{type:"button",onClick:()=>void c(i,!0),children:"Set bit 1"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void c(i,!1),children:"Set bit 0"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void v(),children:"Get bit"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("bitcount",{start:0,end:-1}),children:"Count ones"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void m(),children:"Delete bitmap"})]}),(s==null?void 0:s.count)!==void 0&&a.jsxs("p",{className:"bloom-hit",children:["count = ",s.count]}),(s==null?void 0:s.present)!==void 0&&s.bit!==void 0&&a.jsxs("p",{className:s.bit?"bloom-hit":"bloom-miss",children:["offset ",i," → ",s.present?s.bit?"1":"0":"missing"]}),a.jsx("p",{className:"note",children:"Click a cell to toggle that offset (0–63)."}),a.jsx("div",{className:"bits",children:l.map((k,y)=>a.jsx("button",{type:"button",className:k?"bit on":"bit",onClick:()=>void h(y),title:`offset ${y}`,children:y},y))})]})}function Gd({name:e,setName:t,run:n,last:r}){const[l,o]=L.useState("alice"),[i,u]=L.useState(null),s=r==null?void 0:r.result,c=r&&"maybe"in(r.result??{});L.useEffect(()=>{let P=!1;return Ud("bloom",e,l).then(d=>{P||u(d)}).catch(()=>{P||u(null)}),()=>{P=!0}},[e,l,r]);async function h(P=l){const d=P.trim();d&&(o(d),await n("bloomadd",{item:d}))}async function v(P=l){const d=P.trim();d&&(o(d),await n("bloomtest",{item:d}))}async function m(){await n("delete")}const k=(i==null?void 0:i.bits)??Array(64).fill(!1),y=new Set((i==null?void 0:i.positions)??[]),x=c?s==null?void 0:s.maybe:i==null?void 0:i.maybe;return a.jsxs("div",{children:[a.jsx(fe,{when:"cheap maybe-membership.",not:"exact — this is not a bitmap you toggle."}),a.jsx(de,{name:e,setName:t,placeholder:"filter name, e.g. users"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:P=>o(P.target.value),onKeyDown:P=>{P.key==="Enter"&&h()},placeholder:"member to add/test, e.g. alice"})]}),a.jsxs("div",{className:"stack-actions",children:[a.jsx("button",{type:"button",onClick:()=>void h(),children:"Add to filter"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void v(),children:"Test membership"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void m(),children:"Delete filter"})]}),x!==void 0&&l.trim()&&a.jsxs("p",{className:x?"bloom-hit":"bloom-miss",children:[l," → ",x?"maybe":"no",i&&` · k=${i.k} hashes`]}),a.jsx("p",{className:"note",children:"Grid is the 64-bit filter (same idea as Bitmap). Yellow ring = hash slots for the item in the box."}),a.jsx("div",{className:"bits",children:k.map((P,d)=>a.jsx("span",{className:"bit"+(P?" on":"")+(y.has(d)?" probe":""),title:`bit ${d}${y.has(d)?" (hash)":""}${P?" set":""}`,children:d},d))})]})}function Xd({name:e,setName:t,run:n,last:r}){var c;const[l,o]=L.useState("t003"),[i,u]=L.useState(1),s=(c=r==null?void 0:r.result)==null?void 0:c.count;return a.jsxs("div",{children:[a.jsx(fe,{when:"approximate frequency of any item.",not:"TopK — CMS still answers after eviction."}),a.jsx(de,{name:e,setName:t,placeholder:"sketch name, e.g. freq"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"item to count, e.g. t003"})]}),a.jsxs("label",{className:"stack",children:["n (0 means 1)",a.jsx("input",{type:"number",value:i,onChange:h=>u(Number(h.target.value)),placeholder:"increment count, e.g. 1"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("cmsincr",{item:l,n:i}),children:"Incr"}),a.jsx("button",{className:"ghost",onClick:()=>n("cmsquery",{item:l}),children:"Query"}),s!==void 0&&a.jsx("strong",{children:s})]})]})}function Zd({name:e,setName:t,run:n}){const[r,l]=L.useState("hello");return a.jsxs("div",{children:[a.jsx(fe,{when:"opaque KV with no backend.",not:"a source of truth — writes ACK on the owner."}),a.jsx(de,{name:e,setName:t,placeholder:"key, e.g. session"}),a.jsxs("label",{className:"stack",children:["value (bytes as text)",a.jsx("input",{value:r,onChange:o=>l(o.target.value),placeholder:"opaque string, e.g. hello"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("put",{value:r}),children:"Put"}),a.jsx("button",{className:"ghost",onClick:()=>n("get"),children:"Get"}),a.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete"})]})]})}function Jd({name:e,setName:t,run:n,last:r}){var u;const[l,o]=L.useState(1),i=(u=r==null?void 0:r.result)==null?void 0:u.value;return a.jsxs("div",{children:[a.jsx(fe,{when:"a single int64 (rate-limit windows, tallies).",not:"a float score — that is ZSet."}),a.jsx(de,{name:e,setName:t,placeholder:"counter name, e.g. rl"}),a.jsxs("label",{className:"stack",children:["delta",a.jsx("input",{type:"number",value:l,onChange:s=>o(Number(s.target.value)),placeholder:"int64 to add, e.g. 1 or -1"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("incr",{delta:l}),children:"Incr"}),a.jsx("button",{className:"ghost",onClick:()=>n("cget"),children:"Get"}),a.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete"}),i!==void 0&&a.jsx("strong",{style:{fontSize:"1.6rem"},children:i})]})]})}const Yu=["#38bdf8","#34d399","#fbbf24","#f472b6","#a78bfa","#fb7185","#2dd4bf","#f97316"];function qd(e){let t=0;for(let n=0;n>>0;return Yu[t%Yu.length]}function bd({name:e,setName:t,run:n,last:r}){var p;const[l,o]=L.useState("shop"),[i,u]=L.useState(-74),[s,c]=L.useState(40.7),[h,v]=L.useState(20),[m,k]=L.useState(10),y=((p=r==null?void 0:r.result)==null?void 0:p.members)??[],x=Math.max(h,.001),P=.35;function d(){return Math.max(0,h)*1e3}function f(g,S){const j=(S-s)*111.32;return{x:(g-i)*111.32*Math.cos(s*Math.PI/180)/x*P,y:-j/x*P}}return a.jsxs("div",{children:[a.jsx(fe,{when:"lon/lat radius queries.",not:"an embedding space — use VectorSet."}),a.jsx(de,{name:e,setName:t,placeholder:"index name, e.g. places"}),a.jsxs("label",{className:"stack",children:["member",a.jsx("input",{value:l,onChange:g=>o(g.target.value),placeholder:"point id, e.g. shop"})]}),a.jsxs("div",{className:"pair",children:[a.jsxs("label",{className:"stack",children:["lat",a.jsx("input",{type:"number",step:"0.01",value:s,onChange:g=>c(Number(g.target.value)),placeholder:"e.g. 40.7"})]}),a.jsxs("label",{className:"stack",children:["lng",a.jsx("input",{type:"number",step:"0.01",value:i,onChange:g=>u(Number(g.target.value)),placeholder:"e.g. -74.0"})]})]}),a.jsxs("label",{className:"stack",children:["radius (km)",a.jsx("input",{type:"number",min:0,step:"0.1",value:h,onChange:g=>v(Number(g.target.value)),placeholder:"search radius in km, e.g. 20"})]}),a.jsxs("label",{className:"stack",children:["limit (0 = all)",a.jsx("input",{type:"number",min:0,value:m,onChange:g=>k(Number(g.target.value)),placeholder:"max hits, e.g. 10"})]}),a.jsxs("div",{className:"stack-actions",children:[a.jsx("button",{type:"button",onClick:()=>void n("geoadd",{member:l,lon:i,lat:s}),children:"Add point"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("georadius",{lon:i,lat:s,radius:d(),limit:m}),children:"Radius query"}),a.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("georem",{member:l}),children:"Remove member"})]}),y.length>0&&a.jsxs("p",{className:"note",children:[y.length," hit",y.length===1?"":"s"," within ",h," km"]}),a.jsxs("svg",{className:"plot",viewBox:"-1 -1 2 2",children:[a.jsx("circle",{cx:"0",cy:"0",r:P,fill:"none",stroke:"#334155"}),y.map(g=>{const S=f(g.lon,g.lat);return a.jsx("circle",{cx:S.x,cy:S.y,r:"0.028",fill:qd(g.member),fillOpacity:.5},g.member)})]})]})}function ep({name:e,setName:t,run:n,last:r}){var c;const[l,o]=L.useState("user-1"),[i,u]=L.useState(new Set),s=(c=r==null?void 0:r.result)==null?void 0:c.count;return a.jsxs("div",{children:[a.jsx(fe,{when:"approximate distinct count.",not:"an exact set — items are hashed away."}),a.jsx(de,{name:e,setName:t,placeholder:"sketch name, e.g. uniques"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"hashed item, e.g. user-1"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:async()=>{await n("hlladd",{item:l}),u(h=>new Set(h).add(l))},children:"Add"}),a.jsx("button",{className:"ghost",onClick:()=>n("hllcount"),children:"Count"})]}),a.jsxs("p",{className:"note",children:["estimate ",s??"—"," · exact UI set ",i.size]})]})}function tp({name:e,setName:t,run:n,last:r}){var c;const[l,o]=L.useState("email"),[i,u]=L.useState("a@b"),s=((c=r==null?void 0:r.result)==null?void 0:c.fields)??[];return a.jsxs("div",{children:[a.jsx(fe,{when:"many fields that change independently.",not:"one JSON Put — that is a single LWW blob."}),a.jsx(de,{name:e,setName:t,placeholder:"hash name, e.g. profile"}),a.jsxs("label",{className:"stack",children:["field",a.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"field name, e.g. email"})]}),a.jsxs("label",{className:"stack",children:["value",a.jsx("input",{value:i,onChange:h=>u(h.target.value),placeholder:"field value, e.g. a@b"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("hset",{field:l,value:i}),children:"HSet"}),a.jsx("button",{className:"ghost",onClick:()=>n("hget",{field:l}),children:"HGet"}),a.jsx("button",{className:"ghost",onClick:()=>n("hdel",{field:l}),children:"HDel"}),a.jsx("button",{className:"ghost",onClick:()=>n("hgetall"),children:"HGetAll"})]}),s.map(h=>a.jsxs("div",{className:"note",children:[h.field," = ",h.value]},h.field))]})}function np({name:e,setName:t,run:n,last:r}){var c;const[l,o]=L.useState("$.name"),[i,u]=L.useState('"Ada"'),s=(c=r==null?void 0:r.result)==null?void 0:c.raw;return a.jsxs("div",{children:[a.jsx(fe,{when:"a nested document with path updates.",not:"per-field concurrency — use Hash."}),a.jsx(de,{name:e,setName:t,placeholder:"document name, e.g. doc"}),a.jsxs("label",{className:"stack",children:["path",a.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"JSON path, e.g. $.name or $"})]}),a.jsxs("label",{className:"stack",children:["JSON value",a.jsx("input",{value:i,onChange:h=>u(h.target.value),placeholder:'raw JSON, e.g. "Ada" or {"ok":true}'})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("jsonset",{path:l,value:i}),children:"Set"}),a.jsx("button",{className:"ghost",onClick:()=>n("jsonget",{path:"$"}),children:"Get $"}),a.jsx("button",{className:"ghost",onClick:()=>n("jsondel",{path:l}),children:"Del path"})]}),s&&a.jsx("pre",{className:"result",children:s})]})}function rp({name:e,setName:t,run:n,last:r}){var u;const[l,o]=L.useState("event1"),i=((u=r==null?void 0:r.result)==null?void 0:u.items)??[];return a.jsxs("div",{children:[a.jsx(fe,{when:"a queue or timeline.",not:"a set — order and duplicates matter."}),a.jsx(de,{name:e,setName:t,placeholder:"list name, e.g. inbox"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:s=>o(s.target.value),placeholder:"list element, e.g. event1"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("lpush",{item:l}),children:"LPush"}),a.jsx("button",{onClick:()=>n("rpush",{item:l}),children:"RPush"}),a.jsx("button",{className:"ghost",onClick:()=>n("lpop"),children:"LPop"}),a.jsx("button",{className:"ghost",onClick:()=>n("rpop"),children:"RPop"}),a.jsx("button",{className:"ghost",onClick:()=>n("lrange",{start:0,stop:-1}),children:"LRange"})]}),a.jsx("div",{className:"row",children:i.map((s,c)=>a.jsx("code",{children:s},c))})]})}function lp({name:e,setName:t,run:n,cluster:r}){return a.jsxs("div",{children:[a.jsx(fe,{when:"cache a backend (SoT) on miss, with singleflight.",not:"CacheOnly — a miss here loads."}),a.jsx(de,{name:e,setName:t,placeholder:"key to load, e.g. chart"}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("get"),children:"Get (may load SoT)"}),a.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete / invalidate"}),a.jsxs("span",{className:"note",children:["SoT loads: ",(r==null?void 0:r.sot_loads)??0]})]})]})}function op({name:e,setName:t,run:n,last:r}){var u;const[l,o]=L.useState("dark_mode"),i=((u=r==null?void 0:r.result)==null?void 0:u.members)??[];return a.jsxs("div",{children:[a.jsx(fe,{when:"exact membership.",not:"a Bloom filter, and not Get/Put."}),a.jsx(de,{name:e,setName:t,placeholder:"set name, e.g. flags"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:s=>o(s.target.value),placeholder:"exact member, e.g. dark_mode"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("sadd",{item:l}),children:"Add"}),a.jsx("button",{className:"ghost",onClick:()=>n("srem",{item:l}),children:"Remove"}),a.jsx("button",{className:"ghost",onClick:()=>n("sismember",{item:l}),children:"Contains"}),a.jsx("button",{className:"ghost",onClick:()=>n("smembers"),children:"Members"}),a.jsx("button",{className:"ghost",onClick:()=>n("get"),children:"Wrong verb (Get)"})]}),i.length>0&&a.jsx("p",{className:"note",children:i.join(", ")})]})}function ip({name:e,setName:t,run:n,last:r}){var s;const[l,o]=L.useState("t001"),i=((s=r==null?void 0:r.result)==null?void 0:s.entries)??[],u=Math.max(1,...i.map(c=>c.count));return a.jsxs("div",{children:[a.jsx(fe,{when:"heavy hitters from a stream.",not:"ZAdd — you do not write the score."}),a.jsx(de,{name:e,setName:t,placeholder:"table name, e.g. hot"}),a.jsxs("label",{className:"stack",children:["item",a.jsx("input",{value:l,onChange:c=>o(c.target.value),placeholder:"observation id, e.g. t001"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("topkadd",{item:l}),children:"Observe"}),a.jsx("button",{className:"ghost",onClick:()=>n("topklist"),children:"List"})]}),a.jsx("div",{className:"bars",children:i.map(c=>a.jsx("div",{className:"bar",style:{height:`${c.count/u*100}%`},title:`${c.item} ${c.count}`},c.item))})]})}function up({name:e,setName:t,run:n,last:r}){var k;const[l,o]=L.useState("east"),[i,u]=L.useState(1),[s,c]=L.useState(0),[h,v]=L.useState([]),m=((k=r==null?void 0:r.result)==null?void 0:k.hits)??[];return a.jsxs("div",{children:[a.jsx(fe,{when:"small in-memory K-NN.",not:"HNSW / Faiss — brute force under the store mutex."}),a.jsx(de,{name:e,setName:t,placeholder:"set name, e.g. items"}),a.jsxs("label",{className:"stack",children:["member",a.jsx("input",{value:l,onChange:y=>o(y.target.value),placeholder:"vector id, e.g. east"})]}),a.jsxs("label",{className:"stack",children:["x (dim 0)",a.jsx("input",{type:"number",step:"0.1",value:i,onChange:y=>u(Number(y.target.value)),placeholder:"float32, e.g. 1"})]}),a.jsxs("label",{className:"stack",children:["y (dim 1)",a.jsx("input",{type:"number",step:"0.1",value:s,onChange:y=>c(Number(y.target.value)),placeholder:"float32, e.g. 0"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:async()=>{await n("vadd",{member:l,vec:[i,s]}),v(y=>[...y.filter(x=>x.member!==l),{member:l,x:i,y:s}])},children:"VAdd"}),a.jsx("button",{className:"ghost",onClick:()=>n("vsim",{vec:[i,s],k:3}),children:"VSim"}),a.jsx("button",{className:"ghost",onClick:()=>n("vrem",{member:l}),children:"VRem"})]}),a.jsxs("svg",{className:"plot",viewBox:"-1.2 -1.2 2.4 2.4",children:[a.jsx("line",{x1:"-1.2",y1:"0",x2:"1.2",y2:"0",stroke:"#334155"}),a.jsx("line",{x1:"0",y1:"-1.2",x2:"0",y2:"1.2",stroke:"#334155"}),h.map(y=>a.jsx("circle",{cx:y.x,cy:-y.y,r:"0.07",fill:"#38bdf8"},y.member)),a.jsx("line",{x1:"0",y1:"0",x2:i,y2:-s,stroke:"#fbbf24",strokeWidth:"0.03"})]}),m.length>0&&a.jsx("p",{className:"note",children:m.map(y=>`${y.member} ${y.score.toFixed(3)}`).join(" · ")})]})}function sp({name:e,setName:t,run:n,last:r}){var c;const[l,o]=L.useState("alice"),[i,u]=L.useState(100),s=((c=r==null?void 0:r.result)==null?void 0:c.members)??[];return a.jsxs("div",{children:[a.jsx(fe,{when:"an exact scored ranking you write.",not:"TopK — those are observations, not scores."}),a.jsx(de,{name:e,setName:t,placeholder:"zset name, e.g. board"}),a.jsxs("label",{className:"stack",children:["member",a.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"member id, e.g. alice"})]}),a.jsxs("label",{className:"stack",children:["score",a.jsx("input",{type:"number",value:i,onChange:h=>u(Number(h.target.value)),placeholder:"float score, e.g. 100"})]}),a.jsxs("div",{className:"row",children:[a.jsx("button",{onClick:()=>n("zadd",{member:l,score:i}),children:"ZAdd"}),a.jsx("button",{className:"ghost",onClick:()=>n("zrem",{member:l}),children:"ZRem"}),a.jsx("button",{className:"ghost",onClick:()=>n("zrange",{start:0,stop:-1}),children:"ZRange"})]}),s.length>0&&a.jsx("table",{children:a.jsx("tbody",{children:s.map(h=>a.jsxs("tr",{children:[a.jsx("td",{children:h.member}),a.jsx("td",{children:h.score})]},h.member))})})]})}function ap(e){var n;const t={name:e.name,setName:e.setName,via:e.via,run:e.run,last:e.last,cluster:e.cluster};return a.jsxs("section",{className:"play",children:[a.jsx("div",{className:"section-label",children:"Controls"}),a.jsxs("div",{className:"row",children:[a.jsx("h2",{children:e.chapter.label}),a.jsxs("label",{children:["ingress",a.jsx("select",{value:e.via,onChange:r=>e.setVia(r.target.value),children:(((n=e.cluster)==null?void 0:n.nodes)??[]).map(r=>a.jsx("option",{value:r.id,children:r.id},r.id))})]}),a.jsx("button",{onClick:e.onScene,children:"Run scene"})]}),a.jsx(cp,{id:e.chapter.id,w:t})]})}function cp({id:e,w:t}){switch(e){case"loadthrough":return a.jsx(lp,{...t});case"bloom":return a.jsx(Gd,{...t});case"set":return a.jsx(op,{...t});case"zset":return a.jsx(sp,{...t});case"geo":return a.jsx(bd,{...t});case"list":return a.jsx(rp,{...t});case"hash":return a.jsx(tp,{...t});case"counter":return a.jsx(Jd,{...t});case"json":return a.jsx(np,{...t});case"bitmap":return a.jsx(Yd,{...t});case"hll":return a.jsx(ep,{...t});case"topk":return a.jsx(ip,{...t});case"cms":return a.jsx(Xd,{...t});case"vectorset":return a.jsx(up,{...t});default:return a.jsx(Zd,{...t})}}function fp({view:e,last:t}){const n=(e==null?void 0:e.nodes)??[];return a.jsxs("section",{className:"canvas",children:[a.jsxs("div",{className:"nodes",children:[n.map(r=>{const l=["node",r.role,r.kind].join(" ");return a.jsxs("article",{className:l,children:[a.jsx("div",{className:"id",children:r.id}),a.jsx("div",{className:"meta",children:r.cache}),a.jsxs("div",{className:"meta",children:[r.role," · v",r.version," · ",r.bytes,"B"]}),a.jsx("span",{className:"kind "+r.kind,children:r.kind})]},r.id)}),n.length===0&&a.jsx("p",{className:"muted",children:"No backend. Connect cache gRPC addresses above, or start a local 3-node mesh."})]}),a.jsx("div",{className:"trace",children:((t==null?void 0:t.trace)??["Run a chapter or a verb — the mesh observation lands here."]).map(r=>a.jsx("div",{children:r},r))})]})}function dp(){const[e,t]=L.useState(Wd),n=L.useMemo(()=>Xt.find(C=>C.id===e)??Xt[0],[e]),[r,l]=L.useState(null),[o,i]=L.useState(null),[u,s]=L.useState(null),[c,h]=L.useState(""),[v,m]=L.useState(n.name),[k,y]=L.useState(!1),[x,P]=L.useState(!1),[d,f]=L.useState(()=>localStorage.getItem("lab.addrs")||"127.0.0.1:9000"),[p,g]=L.useState(""),S=L.useCallback(async()=>{var R;const C=await Dd();return l(C),C.nodes[0]&&!C.nodes.some(pe=>pe.id===c)&&h(C.nodes[0].id),(R=C.addrs)!=null&&R.length&&f(C.addrs.join(",")),C},[c]),j=L.useCallback(async(C=n.ks,R=v)=>{!C||!R||i(await $d(C,R))},[n.ks,v]);L.useEffect(()=>{S().then(()=>j())},[S,j]);function _(C){const R=Xt.find(pe=>pe.id===C)??Xt[0];t(R.id),Hd(R.id),m(R.name),s(null),j(R.ks,R.name)}async function z(C,R={}){P(!0);try{k&&await new Promise(kt=>setTimeout(kt,400));const pe=await Ad(n.ks,C,v,R,c);return s(pe),pe.after?i(pe.after):await j(),await S(),pe}finally{P(!1)}}async function V(){P(!0);try{const C=await Vd(n.id),R=C.steps[C.steps.length-1];R!=null&&R.resp&&(s(R.resp),R.resp.after&&i(R.resp.after)),await S()}finally{P(!1)}}return a.jsxs("div",{className:"shell",children:[a.jsxs("header",{className:"top",children:[a.jsx("h1",{children:"SuperCache Lab"}),a.jsxs("span",{className:"muted",children:[(r==null?void 0:r.mode)??"disconnected",r!=null&&r.connected?` · ${r.nodes.length} node(s)`:""]}),a.jsx("input",{className:"top-addrs",value:d,onChange:C=>f(C.target.value),placeholder:"cache gRPC, e.g. 127.0.0.1:9000,127.0.0.1:9010",title:p||"Comma-separated cache gRPC addresses"}),a.jsx("button",{type:"button",disabled:x,onClick:()=>{P(!0),g(""),localStorage.setItem("lab.addrs",d),Ku({addrs:d}).then(C=>{var R;return l(C),h(((R=C.nodes[0])==null?void 0:R.id)??""),s(null),j()}).catch(C=>g(C.message)).finally(()=>P(!1))},children:"Connect"}),a.jsx("button",{type:"button",className:"ghost",disabled:x,onClick:()=>{P(!0),g(""),Ku({in_process:!0}).then(C=>{var R;return l(C),h(((R=C.nodes[0])==null?void 0:R.id)??""),s(null),j()}).catch(C=>g(C.message)).finally(()=>P(!1))},children:"Local 3-node"}),a.jsx("button",{type:"button",className:"ghost",disabled:x||!(r!=null&&r.connected),onClick:()=>{P(!0),g(""),Fd().then(C=>{l(C),h(""),i(null),s(null)}).catch(C=>g(C.message)).finally(()=>P(!1))},children:"Disconnect"}),p&&a.jsx("span",{className:"bloom-miss",children:p}),a.jsx("span",{className:"grow"}),a.jsxs("label",{className:"muted",children:[a.jsx("input",{type:"checkbox",checked:k,onChange:C=>y(C.target.checked)})," slow-mo"]}),a.jsx("button",{className:"ghost",disabled:x,onClick:()=>{Bd().then(()=>{s(null),j(),S()})},children:"Reset"})]}),a.jsx(Qd,{current:n.id,onPick:_}),a.jsx(fp,{view:o,last:u}),a.jsxs("aside",{className:"sidebar",children:[a.jsx(ap,{chapter:n,via:c,setVia:h,cluster:r,name:v,setName:m,run:z,last:u,onScene:()=>void V()}),a.jsx(Kd,{cluster:r,view:o,last:u,name:v,setName:m,onRefresh:()=>void j()})]})]})}Gl.createRoot(document.getElementById("root")).render(a.jsx(Cc.StrictMode,{children:a.jsx(dp,{})})); +`+o.stack}return{value:e,source:t,stack:l,digest:null}}function Hl(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Po(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var cd=typeof WeakMap=="function"?WeakMap:Map;function Ra(e,t,n){n=Xe(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){br||(br=!0,Uo=r),Po(e,t)},n}function Oa(e,t,n){n=Xe(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){Po(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Po(e,t),typeof r!="function"&&(ft===null?ft=new Set([this]):ft.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function _u(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new cd;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=Cd.bind(null,e,t,n),t.then(e,e))}function Pu(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Lu(e,t,n,r,l){return e.mode&1?(e.flags|=65536,e.lanes=l,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Xe(-1,1),t.tag=2,ct(n,t,1))),n.lanes|=1),e)}var fd=qe.ReactCurrentOwner,me=!1;function ae(e,t,n,r){t.child=e===null?sa(t,null,n,r):on(t,e.child,n,r)}function zu(e,t,n,r,l){n=n.render;var o=t.ref;return en(t,l),r=ki(e,t,n,r,o,l),n=wi(),e!==null&&!me?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Je(e,t,l)):(V&&n&&si(t),t.flags|=1,ae(e,t,r,l),t.child)}function Tu(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!Ti(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Ma(e,t,o,r,l)):(e=Rr(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&l)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:Vn,n(i,r)&&e.ref===t.ref)return Je(e,t,l)}return t.flags|=1,e=pt(o,r),e.ref=t.ref,e.return=t,t.child=e}function Ma(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(Vn(o,r)&&e.ref===t.ref)if(me=!1,t.pendingProps=r=o,(e.lanes&l)!==0)e.flags&131072&&(me=!0);else return t.lanes=e.lanes,Je(e,t,l)}return Lo(e,t,n,r,l)}function Ia(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},U(Yt,xe),xe|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,U(Yt,xe),xe|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,U(Yt,xe),xe|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,U(Yt,xe),xe|=r;return ae(e,t,l,n),t.child}function Da(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Lo(e,t,n,r,l){var o=ge(n)?Lt:ie.current;return o=rn(t,o),en(t,l),n=ki(e,t,n,r,o,l),r=wi(),e!==null&&!me?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Je(e,t,l)):(V&&r&&si(t),t.flags|=1,ae(e,t,n,l),t.child)}function Ru(e,t,n,r,l){if(ge(n)){var o=!0;Wr(t)}else o=!1;if(en(t,l),t.stateNode===null)Lr(e,t),Ta(t,n,r),_o(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,u=t.memoizedProps;i.props=u;var a=i.context,c=n.contextType;typeof c=="object"&&c!==null?c=Le(c):(c=ge(n)?Lt:ie.current,c=rn(t,c));var h=n.getDerivedStateFromProps,v=typeof h=="function"||typeof i.getSnapshotBeforeUpdate=="function";v||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==r||a!==c)&&Eu(t,i,r,c),tt=!1;var m=t.memoizedState;i.state=m,Yr(t,r,i,l),a=t.memoizedState,u!==r||m!==a||ve.current||tt?(typeof h=="function"&&(Eo(t,n,h,r),a=t.memoizedState),(u=tt||Nu(t,n,u,r,m,a,c))?(v||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=a),i.props=r,i.state=a,i.context=c,r=u):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,ca(e,t),u=t.memoizedProps,c=t.type===t.elementType?u:Re(t.type,u),i.props=c,v=t.pendingProps,m=i.context,a=n.contextType,typeof a=="object"&&a!==null?a=Le(a):(a=ge(n)?Lt:ie.current,a=rn(t,a));var x=n.getDerivedStateFromProps;(h=typeof x=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==v||m!==a)&&Eu(t,i,r,a),tt=!1,m=t.memoizedState,i.state=m,Yr(t,r,i,l);var y=t.memoizedState;u!==v||m!==y||ve.current||tt?(typeof x=="function"&&(Eo(t,n,x,r),y=t.memoizedState),(c=tt||Nu(t,n,c,r,m,y,a)||!1)?(h||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,y,a),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,y,a)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=y),i.props=r,i.state=y,i.context=a,r=c):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&m===e.memoizedState||(t.flags|=1024),r=!1)}return zo(e,t,n,r,o,l)}function zo(e,t,n,r,l,o){Da(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return l&&gu(t,n,!1),Je(e,t,o);r=t.stateNode,fd.current=t;var u=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=on(t,e.child,null,o),t.child=on(t,null,u,o)):ae(e,t,u,o),t.memoizedState=r.state,l&&gu(t,n,!0),t.child}function Fa(e){var t=e.stateNode;t.pendingContext?vu(e,t.pendingContext,t.pendingContext!==t.context):t.context&&vu(e,t.context,!1),vi(e,t.containerInfo)}function Ou(e,t,n,r,l){return ln(),ci(l),t.flags|=256,ae(e,t,n,r),t.child}var To={dehydrated:null,treeContext:null,retryLane:0};function Ro(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ua(e,t,n){var r=t.pendingProps,l=B.current,o=!1,i=(t.flags&128)!==0,u;if((u=i)||(u=e!==null&&e.memoizedState===null?!1:(l&2)!==0),u?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(l|=1),U(B,l&1),e===null)return Co(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=hl(i,r,0,null),e=Pt(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Ro(n),t.memoizedState=To,e):Ci(t,i));if(l=e.memoizedState,l!==null&&(u=l.dehydrated,u!==null))return dd(e,t,i,r,u,l,n);if(o){o=r.fallback,i=t.mode,l=e.child,u=l.sibling;var a={mode:"hidden",children:r.children};return!(i&1)&&t.child!==l?(r=t.child,r.childLanes=0,r.pendingProps=a,t.deletions=null):(r=pt(l,a),r.subtreeFlags=l.subtreeFlags&14680064),u!==null?o=pt(u,o):(o=Pt(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Ro(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=To,r}return o=e.child,e=o.sibling,r=pt(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function Ci(e,t){return t=hl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function gr(e,t,n,r){return r!==null&&ci(r),on(t,e.child,null,n),e=Ci(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function dd(e,t,n,r,l,o,i){if(n)return t.flags&256?(t.flags&=-257,r=Hl(Error(k(422))),gr(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,l=t.mode,r=hl({mode:"visible",children:r.children},l,0,null),o=Pt(o,l,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&on(t,e.child,null,i),t.child.memoizedState=Ro(i),t.memoizedState=To,o);if(!(t.mode&1))return gr(e,t,i,null);if(l.data==="$!"){if(r=l.nextSibling&&l.nextSibling.dataset,r)var u=r.dgst;return r=u,o=Error(k(419)),r=Hl(o,r,void 0),gr(e,t,i,r)}if(u=(i&e.childLanes)!==0,me||u){if(r=b,r!==null){switch(i&-i){case 4:l=2;break;case 16:l=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:l=32;break;case 536870912:l=268435456;break;default:l=0}l=l&(r.suspendedLanes|i)?0:l,l!==0&&l!==o.retryLane&&(o.retryLane=l,Ze(e,l),De(r,e,l,-1))}return zi(),r=Hl(Error(k(421))),gr(e,t,i,r)}return l.data==="$?"?(t.flags|=128,t.child=e.child,t=Nd.bind(null,e),l._reactRetry=t,null):(e=o.treeContext,ke=at(l.nextSibling),we=t,V=!0,Me=null,e!==null&&(Ne[Ee++]=Qe,Ne[Ee++]=Ke,Ne[Ee++]=zt,Qe=e.id,Ke=e.overflow,zt=t),t=Ci(t,r.children),t.flags|=4096,t)}function Mu(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),No(e.return,t,n)}function Ql(e,t,n,r,l){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:l}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=l)}function $a(e,t,n){var r=t.pendingProps,l=r.revealOrder,o=r.tail;if(ae(e,t,r.children,n),r=B.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Mu(e,n,t);else if(e.tag===19)Mu(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(U(B,r),!(t.mode&1))t.memoizedState=null;else switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&Gr(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Ql(t,!1,l,n,o);break;case"backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&Gr(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Ql(t,!0,n,null,o);break;case"together":Ql(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Lr(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Je(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Rt|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(k(153));if(t.child!==null){for(e=t.child,n=pt(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=pt(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function pd(e,t,n){switch(t.tag){case 3:Fa(t),ln();break;case 5:fa(t);break;case 1:ge(t.type)&&Wr(t);break;case 4:vi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,l=t.memoizedProps.value;U(Kr,r._currentValue),r._currentValue=l;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(U(B,B.current&1),t.flags|=128,null):n&t.child.childLanes?Ua(e,t,n):(U(B,B.current&1),e=Je(e,t,n),e!==null?e.sibling:null);U(B,B.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return $a(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),U(B,B.current),r)break;return null;case 22:case 23:return t.lanes=0,Ia(e,t,n)}return Je(e,t,n)}var Aa,Oo,Va,Ba;Aa=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Oo=function(){};Va=function(e,t,n,r){var l=e.memoizedProps;if(l!==r){e=t.stateNode,Et(Be.current);var o=null;switch(n){case"input":l=eo(e,l),r=eo(e,r),o=[];break;case"select":l=H({},l,{value:void 0}),r=H({},r,{value:void 0}),o=[];break;case"textarea":l=ro(e,l),r=ro(e,r),o=[];break;default:typeof l.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Vr)}oo(n,r);var i;n=null;for(c in l)if(!r.hasOwnProperty(c)&&l.hasOwnProperty(c)&&l[c]!=null)if(c==="style"){var u=l[c];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(Mn.hasOwnProperty(c)?o||(o=[]):(o=o||[]).push(c,null));for(c in r){var a=r[c];if(u=l!=null?l[c]:void 0,r.hasOwnProperty(c)&&a!==u&&(a!=null||u!=null))if(c==="style")if(u){for(i in u)!u.hasOwnProperty(i)||a&&a.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in a)a.hasOwnProperty(i)&&u[i]!==a[i]&&(n||(n={}),n[i]=a[i])}else n||(o||(o=[]),o.push(c,n)),n=a;else c==="dangerouslySetInnerHTML"?(a=a?a.__html:void 0,u=u?u.__html:void 0,a!=null&&u!==a&&(o=o||[]).push(c,a)):c==="children"?typeof a!="string"&&typeof a!="number"||(o=o||[]).push(c,""+a):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(Mn.hasOwnProperty(c)?(a!=null&&c==="onScroll"&&$("scroll",e),o||u===a||(o=[])):(o=o||[]).push(c,a))}n&&(o=o||[]).push("style",n);var c=o;(t.updateQueue=c)&&(t.flags|=4)}};Ba=function(e,t,n,r){n!==r&&(t.flags|=4)};function xn(e,t){if(!V)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function le(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags&14680064,r|=l.flags&14680064,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function hd(e,t,n){var r=t.pendingProps;switch(ai(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return le(t),null;case 1:return ge(t.type)&&Br(),le(t),null;case 3:return r=t.stateNode,un(),A(ve),A(ie),yi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(mr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Me!==null&&(Vo(Me),Me=null))),Oo(e,t),le(t),null;case 5:gi(t);var l=Et(Kn.current);if(n=t.type,e!==null&&t.stateNode!=null)Va(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(k(166));return le(t),null}if(e=Et(Be.current),mr(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[Ae]=t,r[Hn]=o,e=(t.mode&1)!==0,n){case"dialog":$("cancel",r),$("close",r);break;case"iframe":case"object":case"embed":$("load",r);break;case"video":case"audio":for(l=0;l<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ae]=t,e[Hn]=r,Aa(e,t,!1,!1),t.stateNode=e;e:{switch(i=io(n,r),n){case"dialog":$("cancel",e),$("close",e),l=r;break;case"iframe":case"object":case"embed":$("load",e),l=r;break;case"video":case"audio":for(l=0;lan&&(t.flags|=128,r=!0,xn(o,!1),t.lanes=4194304)}else{if(!r)if(e=Gr(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),xn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!V)return le(t),null}else 2*X()-o.renderingStartTime>an&&n!==1073741824&&(t.flags|=128,r=!0,xn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=X(),t.sibling=null,n=B.current,U(B,r?n&1|2:n&1),t):(le(t),null);case 22:case 23:return Li(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?xe&1073741824&&(le(t),t.subtreeFlags&6&&(t.flags|=8192)):le(t),null;case 24:return null;case 25:return null}throw Error(k(156,t.tag))}function md(e,t){switch(ai(t),t.tag){case 1:return ge(t.type)&&Br(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return un(),A(ve),A(ie),yi(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return gi(t),null;case 13:if(A(B),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(k(340));ln()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return A(B),null;case 4:return un(),null;case 10:return pi(t.type._context),null;case 22:case 23:return Li(),null;case 24:return null;default:return null}}var yr=!1,oe=!1,vd=typeof WeakSet=="function"?WeakSet:Set,E=null;function Xt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){Q(e,t,r)}else n.current=null}function Mo(e,t,n){try{n()}catch(r){Q(e,t,r)}}var Iu=!1;function gd(e,t){if(go=Ur,e=Xs(),ui(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,a=-1,c=0,h=0,v=e,m=null;t:for(;;){for(var x;v!==n||l!==0&&v.nodeType!==3||(u=i+l),v!==o||r!==0&&v.nodeType!==3||(a=i+r),v.nodeType===3&&(i+=v.nodeValue.length),(x=v.firstChild)!==null;)m=v,v=x;for(;;){if(v===e)break t;if(m===n&&++c===l&&(u=i),m===o&&++h===r&&(a=i),(x=v.nextSibling)!==null)break;v=m,m=v.parentNode}v=x}n=u===-1||a===-1?null:{start:u,end:a}}else n=null}n=n||{start:0,end:0}}else n=null;for(yo={focusedElem:e,selectionRange:n},Ur=!1,E=t;E!==null;)if(t=E,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,E=e;else for(;E!==null;){t=E;try{var y=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(y!==null){var w=y.memoizedProps,L=y.memoizedState,d=t.stateNode,f=d.getSnapshotBeforeUpdate(t.elementType===t.type?w:Re(t.type,w),L);d.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var p=t.stateNode.containerInfo;p.nodeType===1?p.textContent="":p.nodeType===9&&p.documentElement&&p.removeChild(p.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(k(163))}}catch(g){Q(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,E=e;break}E=t.return}return y=Iu,Iu=!1,y}function Tn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Mo(t,n,o)}l=l.next}while(l!==r)}}function dl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Io(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Wa(e){var t=e.alternate;t!==null&&(e.alternate=null,Wa(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ae],delete t[Hn],delete t[wo],delete t[bf],delete t[ed])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Ha(e){return e.tag===5||e.tag===3||e.tag===4}function Du(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ha(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.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Do(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Vr));else if(r!==4&&(e=e.child,e!==null))for(Do(e,t,n),e=e.sibling;e!==null;)Do(e,t,n),e=e.sibling}function Fo(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&&(e=e.child,e!==null))for(Fo(e,t,n),e=e.sibling;e!==null;)Fo(e,t,n),e=e.sibling}var ee=null,Oe=!1;function be(e,t,n){for(n=n.child;n!==null;)Qa(e,t,n),n=n.sibling}function Qa(e,t,n){if(Ve&&typeof Ve.onCommitFiberUnmount=="function")try{Ve.onCommitFiberUnmount(ll,n)}catch{}switch(n.tag){case 5:oe||Xt(n,t);case 6:var r=ee,l=Oe;ee=null,be(e,t,n),ee=r,Oe=l,ee!==null&&(Oe?(e=ee,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ee.removeChild(n.stateNode));break;case 18:ee!==null&&(Oe?(e=ee,n=n.stateNode,e.nodeType===8?Ul(e.parentNode,n):e.nodeType===1&&Ul(e,n),$n(e)):Ul(ee,n.stateNode));break;case 4:r=ee,l=Oe,ee=n.stateNode.containerInfo,Oe=!0,be(e,t,n),ee=r,Oe=l;break;case 0:case 11:case 14:case 15:if(!oe&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Mo(n,t,i),l=l.next}while(l!==r)}be(e,t,n);break;case 1:if(!oe&&(Xt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){Q(n,t,u)}be(e,t,n);break;case 21:be(e,t,n);break;case 22:n.mode&1?(oe=(r=oe)||n.memoizedState!==null,be(e,t,n),oe=r):be(e,t,n);break;default:be(e,t,n)}}function Fu(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new vd),t.forEach(function(r){var l=Ed.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Te(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=X()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*xd(r/1960))-r,10e?16:e,ot===null)var r=!1;else{if(e=ot,ot=null,el=0,I&6)throw Error(k(331));var l=I;for(I|=4,E=e.current;E!==null;){var o=E,i=o.child;if(E.flags&16){var u=o.deletions;if(u!==null){for(var a=0;aX()-_i?_t(e,0):Ei|=n),ye(e,t)}function ba(e,t){t===0&&(e.mode&1?(t=ar,ar<<=1,!(ar&130023424)&&(ar=4194304)):t=1);var n=ce();e=Ze(e,t),e!==null&&(qn(e,t,n),ye(e,n))}function Nd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),ba(e,n)}function Ed(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(k(314))}r!==null&&r.delete(t),ba(e,n)}var ec;ec=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||ve.current)me=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return me=!1,pd(e,t,n);me=!!(e.flags&131072)}else me=!1,V&&t.flags&1048576&&la(t,Qr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Lr(e,t),e=t.pendingProps;var l=rn(t,ie.current);en(t,n),l=ki(null,t,r,e,l,n);var o=wi();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ge(r)?(o=!0,Wr(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,mi(t),l.updater=fl,t.stateNode=l,l._reactInternals=t,_o(t,r,e,n),t=zo(null,t,r,!0,o,n)):(t.tag=0,V&&o&&si(t),ae(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Lr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Pd(r),e=Re(r,e),l){case 0:t=Lo(null,t,r,e,n);break e;case 1:t=Ru(null,t,r,e,n);break e;case 11:t=zu(null,t,r,e,n);break e;case 14:t=Tu(null,t,r,Re(r.type,e),n);break e}throw Error(k(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Lo(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Ru(e,t,r,l,n);case 3:e:{if(Fa(t),e===null)throw Error(k(387));r=t.pendingProps,o=t.memoizedState,l=o.element,ca(e,t),Yr(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=sn(Error(k(423)),t),t=Ou(e,t,r,n,l);break e}else if(r!==l){l=sn(Error(k(424)),t),t=Ou(e,t,r,n,l);break e}else for(ke=at(t.stateNode.containerInfo.firstChild),we=t,V=!0,Me=null,n=sa(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ln(),r===l){t=Je(e,t,n);break e}ae(e,t,r,n)}t=t.child}return t;case 5:return fa(t),e===null&&Co(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,xo(r,l)?i=null:o!==null&&xo(r,o)&&(t.flags|=32),Da(e,t),ae(e,t,i,n),t.child;case 6:return e===null&&Co(t),null;case 13:return Ua(e,t,n);case 4:return vi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=on(t,null,r,n):ae(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),zu(e,t,r,l,n);case 7:return ae(e,t,t.pendingProps,n),t.child;case 8:return ae(e,t,t.pendingProps.children,n),t.child;case 12:return ae(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,U(Kr,r._currentValue),r._currentValue=i,o!==null)if(Fe(o.value,i)){if(o.children===l.children&&!ve.current){t=Je(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var a=u.firstContext;a!==null;){if(a.context===r){if(o.tag===1){a=Xe(-1,n&-n),a.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var h=c.pending;h===null?a.next=a:(a.next=h.next,h.next=a),c.pending=a}}o.lanes|=n,a=o.alternate,a!==null&&(a.lanes|=n),No(o.return,n,t),u.lanes|=n;break}a=a.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(k(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),No(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}ae(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,en(t,n),l=Le(l),r=r(l),t.flags|=1,ae(e,t,r,n),t.child;case 14:return r=t.type,l=Re(r,t.pendingProps),l=Re(r.type,l),Tu(e,t,r,l,n);case 15:return Ma(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Re(r,l),Lr(e,t),t.tag=1,ge(r)?(e=!0,Wr(t)):e=!1,en(t,n),Ta(t,r,l),_o(t,r,l,n),zo(null,t,r,!0,e,n);case 19:return $a(e,t,n);case 22:return Ia(e,t,n)}throw Error(k(156,t.tag))};function tc(e,t){return Ps(e,t)}function _d(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function _e(e,t,n,r){return new _d(e,t,n,r)}function Ti(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Pd(e){if(typeof e=="function")return Ti(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Zo)return 11;if(e===Jo)return 14}return 2}function pt(e,t){var n=e.alternate;return n===null?(n=_e(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Rr(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")Ti(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Ut:return Pt(n.children,l,o,t);case Go:i=8,l|=8;break;case Zl:return e=_e(12,n,t,l|2),e.elementType=Zl,e.lanes=o,e;case Jl:return e=_e(13,n,t,l),e.elementType=Jl,e.lanes=o,e;case ql:return e=_e(19,n,t,l),e.elementType=ql,e.lanes=o,e;case fs:return hl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case as:i=10;break e;case cs:i=9;break e;case Zo:i=11;break e;case Jo:i=14;break e;case et:i=16,r=null;break e}throw Error(k(130,e==null?e:typeof e,""))}return t=_e(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Pt(e,t,n,r){return e=_e(7,e,r,t),e.lanes=n,e}function hl(e,t,n,r){return e=_e(22,e,r,t),e.elementType=fs,e.lanes=n,e.stateNode={isHidden:!1},e}function Kl(e,t,n){return e=_e(6,e,null,t),e.lanes=n,e}function Xl(e,t,n){return t=_e(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ld(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=_l(0),this.expirationTimes=_l(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=_l(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Ri(e,t,n,r,l,o,i,u,a){return e=new Ld(e,t,n,u,a),t===1?(t=1,o===!0&&(t|=8)):t=0,o=_e(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},mi(o),e}function zd(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(oc)}catch(e){console.error(e)}}oc(),os.exports=je;var Id=os.exports,Qu=Id;Yl.createRoot=Qu.createRoot,Yl.hydrateRoot=Qu.hydrateRoot;const Gt=[{id:"anatomy",label:"Anatomy",ks:"cacheonly",name:"session"},{id:"kv-write",label:"KV write",ks:"cacheonly",name:"session"},{id:"loadthrough",label:"LoadThrough",ks:"loadthrough",name:"chart"},{id:"tombstone",label:"Tombstone",ks:"cacheonly",name:"session"},{id:"bloom",label:"Bloom",ks:"bloom",name:"users"},{id:"set",label:"Set",ks:"set",name:"flags"},{id:"zset",label:"ZSet",ks:"zset",name:"board"},{id:"geo",label:"Geo",ks:"geo",name:"places"},{id:"list",label:"List",ks:"list",name:"inbox"},{id:"hash",label:"Hash",ks:"hash",name:"profile"},{id:"counter",label:"Counter",ks:"counter",name:"rl"},{id:"json",label:"JSON",ks:"json",name:"doc"},{id:"bitmap",label:"Bitmap",ks:"bitmap",name:"seen"},{id:"hll",label:"HLL",ks:"hll",name:"uniques"},{id:"topk",label:"TopK",ks:"topk",name:"hot"},{id:"cms",label:"CMS",ks:"cms",name:"freq"},{id:"vectorset",label:"VectorSet",ks:"vectorset",name:"items"},{id:"stream",label:"Stream",ks:"stream",name:"logs"}];async function Dd(){const e=await fetch("/v1/cluster");if(!e.ok)throw new Error(await e.text());return e.json()}async function Ku(e){const t=await fetch("/v1/connect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json();if(!t.ok)throw new Error(n.error||t.statusText);return n}async function Fd(){const e=await fetch("/v1/disconnect",{method:"POST"});if(!e.ok)throw new Error(await e.text());return e.json()}async function Ud(e,t,n){const r=new URLSearchParams({ks:e,name:t,item:n}),l=await fetch(`/v1/bloom?${r}`);if(!l.ok)throw new Error(await l.text());return l.json()}async function $d(e,t){const n=await fetch(`/v1/view?ks=${encodeURIComponent(e)}&key=${encodeURIComponent(t)}`);if(!n.ok)throw new Error(await n.text());return n.json()}async function Ad(e,t,n,r={},l=""){return await(await fetch("/v1/op",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ks:e,op:t,name:n,via:l,args:r})})).json()}async function Vd(e){const t=await fetch(`/v1/scene/${encodeURIComponent(e)}`,{method:"POST"});if(!t.ok)throw new Error(await t.text());return t.json()}async function Bd(e=[]){await fetch("/v1/reset",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({names:e})})}function Wd(){const e=new URLSearchParams(window.location.search).get("chapter");return e&&Gt.some(t=>t.id===e)?e:"anatomy"}function Hd(e){const t=new URL(window.location.href);t.searchParams.set("chapter",e),window.history.replaceState(null,"",t.toString())}function Qd({current:e,onPick:t}){return s.jsx("nav",{className:"nav",children:Gt.map(n=>s.jsx("button",{className:n.id===e?"active":"",onClick:()=>t(n.id),children:n.label},n.id))})}function Kd({cluster:e,view:t,last:n,name:r,setName:l,onRefresh:o}){return s.jsxs("aside",{className:"inspector",children:[s.jsx("h2",{children:"Results"}),s.jsxs("dl",{children:[s.jsx("dt",{children:"name"}),s.jsx("dd",{children:s.jsx("input",{value:r,onChange:i=>l(i.target.value),onBlur:o,placeholder:"key or name, e.g. session"})}),s.jsx("dt",{children:"owner"}),s.jsx("dd",{children:s.jsx("code",{children:(t==null?void 0:t.owner)||"—"})}),s.jsx("dt",{children:"RF"}),s.jsx("dd",{children:(t==null?void 0:t.rf)??(e==null?void 0:e.rf)??"—"}),s.jsx("dt",{children:"ring gen"}),s.jsx("dd",{children:(t==null?void 0:t.ring_gen)??(e==null?void 0:e.ring_gen)??"—"}),s.jsx("dt",{children:"SoT loads"}),s.jsxs("dd",{children:[(e==null?void 0:e.sot_loads)??0," ",s.jsxs("span",{className:"muted",children:["(",e==null?void 0:e.sot_latency,")"]})]})]}),(n==null?void 0:n.trace)&&n.trace.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("h2",{children:"Trace"}),s.jsx("div",{className:"trace",children:n.trace.map(i=>s.jsx("div",{children:i},i))})]}),n&&s.jsxs(s.Fragment,{children:[s.jsx("h2",{children:"Last result"}),n.error&&s.jsx("p",{children:n.invalid_argument?"invalid argument":n.error}),s.jsx("pre",{className:"result",children:JSON.stringify(n.result??n,null,2)})]})]})}function ue({when:e,not:t}){return s.jsxs("p",{className:"note",children:[s.jsx("strong",{children:"Use when"})," ",e," · ",s.jsx("strong",{children:"Not"})," ",t]})}function se({name:e,setName:t,placeholder:n="structure name, e.g. session"}){return s.jsxs("label",{className:"stack",children:["name",s.jsx("input",{value:e,onChange:r=>t(r.target.value),placeholder:n})]})}function Xd({name:e,setName:t,run:n,last:r}){const[l,o]=z.useState(Array(64).fill(!1)),[i,u]=z.useState(0),a=r==null?void 0:r.result;async function c(x,y){(await n("bitset",{offset:x,bit:y})).ok&&(u(x),xL.map((d,f)=>f===x?y:d)))}async function h(x){await c(x,!l[x])}async function v(x=i){u(x),await n("bitget",{offset:x})}async function m(){await n("delete"),o(Array(64).fill(!1))}return s.jsxs("div",{children:[s.jsx(ue,{when:"packed flags / presence bits.",not:"a Bloom filter — this is exact and MSB-first."}),s.jsx(se,{name:e,setName:t,placeholder:"bitmap name, e.g. seen"}),s.jsxs("label",{className:"stack",children:["offset",s.jsx("input",{type:"number",min:0,value:i,onChange:x=>u(Math.max(0,Number(x.target.value)||0)),placeholder:"bit index from 0, e.g. 0"})]}),s.jsxs("div",{className:"stack-actions",children:[s.jsx("button",{type:"button",onClick:()=>void c(i,!0),children:"Set bit 1"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void c(i,!1),children:"Set bit 0"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void v(),children:"Get bit"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("bitcount",{start:0,end:-1}),children:"Count ones"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void m(),children:"Delete bitmap"})]}),(a==null?void 0:a.count)!==void 0&&s.jsxs("p",{className:"bloom-hit",children:["count = ",a.count]}),(a==null?void 0:a.present)!==void 0&&a.bit!==void 0&&s.jsxs("p",{className:a.bit?"bloom-hit":"bloom-miss",children:["offset ",i," → ",a.present?a.bit?"1":"0":"missing"]}),s.jsx("p",{className:"note",children:"Click a cell to toggle that offset (0–63)."}),s.jsx("div",{className:"bits",children:l.map((x,y)=>s.jsx("button",{type:"button",className:x?"bit on":"bit",onClick:()=>void h(y),title:`offset ${y}`,children:y},y))})]})}function Yd({name:e,setName:t,run:n,last:r}){const[l,o]=z.useState("alice"),[i,u]=z.useState(null),a=r==null?void 0:r.result,c=r&&"maybe"in(r.result??{});z.useEffect(()=>{let L=!1;return Ud("bloom",e,l).then(d=>{L||u(d)}).catch(()=>{L||u(null)}),()=>{L=!0}},[e,l,r]);async function h(L=l){const d=L.trim();d&&(o(d),await n("bloomadd",{item:d}))}async function v(L=l){const d=L.trim();d&&(o(d),await n("bloomtest",{item:d}))}async function m(){await n("delete")}const x=(i==null?void 0:i.bits)??Array(64).fill(!1),y=new Set((i==null?void 0:i.positions)??[]),w=c?a==null?void 0:a.maybe:i==null?void 0:i.maybe;return s.jsxs("div",{children:[s.jsx(ue,{when:"cheap maybe-membership.",not:"exact — this is not a bitmap you toggle."}),s.jsx(se,{name:e,setName:t,placeholder:"filter name, e.g. users"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:L=>o(L.target.value),onKeyDown:L=>{L.key==="Enter"&&h()},placeholder:"member to add/test, e.g. alice"})]}),s.jsxs("div",{className:"stack-actions",children:[s.jsx("button",{type:"button",onClick:()=>void h(),children:"Add to filter"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void v(),children:"Test membership"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void m(),children:"Delete filter"})]}),w!==void 0&&l.trim()&&s.jsxs("p",{className:w?"bloom-hit":"bloom-miss",children:[l," → ",w?"maybe":"no",i&&` · k=${i.k} hashes`]}),s.jsx("p",{className:"note",children:"Grid is the 64-bit filter (same idea as Bitmap). Yellow ring = hash slots for the item in the box."}),s.jsx("div",{className:"bits",children:x.map((L,d)=>s.jsx("span",{className:"bit"+(L?" on":"")+(y.has(d)?" probe":""),title:`bit ${d}${y.has(d)?" (hash)":""}${L?" set":""}`,children:d},d))})]})}function Gd({name:e,setName:t,run:n,last:r}){var c;const[l,o]=z.useState("t003"),[i,u]=z.useState(1),a=(c=r==null?void 0:r.result)==null?void 0:c.count;return s.jsxs("div",{children:[s.jsx(ue,{when:"approximate frequency of any item.",not:"TopK — CMS still answers after eviction."}),s.jsx(se,{name:e,setName:t,placeholder:"sketch name, e.g. freq"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"item to count, e.g. t003"})]}),s.jsxs("label",{className:"stack",children:["n (0 means 1)",s.jsx("input",{type:"number",value:i,onChange:h=>u(Number(h.target.value)),placeholder:"increment count, e.g. 1"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("cmsincr",{item:l,n:i}),children:"Incr"}),s.jsx("button",{className:"ghost",onClick:()=>n("cmsquery",{item:l}),children:"Query"}),a!==void 0&&s.jsx("strong",{children:a})]})]})}function Zd({name:e,setName:t,run:n}){const[r,l]=z.useState("hello");return s.jsxs("div",{children:[s.jsx(ue,{when:"opaque KV with no backend.",not:"a source of truth — writes ACK on the owner."}),s.jsx(se,{name:e,setName:t,placeholder:"key, e.g. session"}),s.jsxs("label",{className:"stack",children:["value (bytes as text)",s.jsx("input",{value:r,onChange:o=>l(o.target.value),placeholder:"opaque string, e.g. hello"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("put",{value:r}),children:"Put"}),s.jsx("button",{className:"ghost",onClick:()=>n("get"),children:"Get"}),s.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete"})]})]})}function Jd({name:e,setName:t,run:n,last:r}){var u;const[l,o]=z.useState(1),i=(u=r==null?void 0:r.result)==null?void 0:u.value;return s.jsxs("div",{children:[s.jsx(ue,{when:"a single int64 (rate-limit windows, tallies).",not:"a float score — that is ZSet."}),s.jsx(se,{name:e,setName:t,placeholder:"counter name, e.g. rl"}),s.jsxs("label",{className:"stack",children:["delta",s.jsx("input",{type:"number",value:l,onChange:a=>o(Number(a.target.value)),placeholder:"int64 to add, e.g. 1 or -1"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("incr",{delta:l}),children:"Incr"}),s.jsx("button",{className:"ghost",onClick:()=>n("cget"),children:"Get"}),s.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete"}),i!==void 0&&s.jsx("strong",{style:{fontSize:"1.6rem"},children:i})]})]})}const Xu=["#38bdf8","#34d399","#fbbf24","#f472b6","#a78bfa","#fb7185","#2dd4bf","#f97316"];function qd(e){let t=0;for(let n=0;n>>0;return Xu[t%Xu.length]}function bd({name:e,setName:t,run:n,last:r}){var p;const[l,o]=z.useState("shop"),[i,u]=z.useState(-74),[a,c]=z.useState(40.7),[h,v]=z.useState(20),[m,x]=z.useState(10),y=((p=r==null?void 0:r.result)==null?void 0:p.members)??[],w=Math.max(h,.001),L=.35;function d(){return Math.max(0,h)*1e3}function f(g,S){const N=(S-a)*111.32;return{x:(g-i)*111.32*Math.cos(a*Math.PI/180)/w*L,y:-N/w*L}}return s.jsxs("div",{children:[s.jsx(ue,{when:"lon/lat radius queries.",not:"an embedding space — use VectorSet."}),s.jsx(se,{name:e,setName:t,placeholder:"index name, e.g. places"}),s.jsxs("label",{className:"stack",children:["member",s.jsx("input",{value:l,onChange:g=>o(g.target.value),placeholder:"point id, e.g. shop"})]}),s.jsxs("div",{className:"pair",children:[s.jsxs("label",{className:"stack",children:["lat",s.jsx("input",{type:"number",step:"0.01",value:a,onChange:g=>c(Number(g.target.value)),placeholder:"e.g. 40.7"})]}),s.jsxs("label",{className:"stack",children:["lng",s.jsx("input",{type:"number",step:"0.01",value:i,onChange:g=>u(Number(g.target.value)),placeholder:"e.g. -74.0"})]})]}),s.jsxs("label",{className:"stack",children:["radius (km)",s.jsx("input",{type:"number",min:0,step:"0.1",value:h,onChange:g=>v(Number(g.target.value)),placeholder:"search radius in km, e.g. 20"})]}),s.jsxs("label",{className:"stack",children:["limit (0 = all)",s.jsx("input",{type:"number",min:0,value:m,onChange:g=>x(Number(g.target.value)),placeholder:"max hits, e.g. 10"})]}),s.jsxs("div",{className:"stack-actions",children:[s.jsx("button",{type:"button",onClick:()=>void n("geoadd",{member:l,lon:i,lat:a}),children:"Add point"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("georadius",{lon:i,lat:a,radius:d(),limit:m}),children:"Radius query"}),s.jsx("button",{type:"button",className:"ghost",onClick:()=>void n("georem",{member:l}),children:"Remove member"})]}),y.length>0&&s.jsxs("p",{className:"note",children:[y.length," hit",y.length===1?"":"s"," within ",h," km"]}),s.jsxs("svg",{className:"plot",viewBox:"-1 -1 2 2",children:[s.jsx("circle",{cx:"0",cy:"0",r:L,fill:"none",stroke:"#334155"}),y.map(g=>{const S=f(g.lon,g.lat);return s.jsx("circle",{cx:S.x,cy:S.y,r:"0.028",fill:qd(g.member),fillOpacity:.5},g.member)})]})]})}function ep({name:e,setName:t,run:n,last:r}){var c;const[l,o]=z.useState("user-1"),[i,u]=z.useState(new Set),a=(c=r==null?void 0:r.result)==null?void 0:c.count;return s.jsxs("div",{children:[s.jsx(ue,{when:"approximate distinct count.",not:"an exact set — items are hashed away."}),s.jsx(se,{name:e,setName:t,placeholder:"sketch name, e.g. uniques"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"hashed item, e.g. user-1"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:async()=>{await n("hlladd",{item:l}),u(h=>new Set(h).add(l))},children:"Add"}),s.jsx("button",{className:"ghost",onClick:()=>n("hllcount"),children:"Count"})]}),s.jsxs("p",{className:"note",children:["estimate ",a??"—"," · exact UI set ",i.size]})]})}function tp({name:e,setName:t,run:n,last:r}){var c;const[l,o]=z.useState("email"),[i,u]=z.useState("a@b"),a=((c=r==null?void 0:r.result)==null?void 0:c.fields)??[];return s.jsxs("div",{children:[s.jsx(ue,{when:"many fields that change independently.",not:"one JSON Put — that is a single LWW blob."}),s.jsx(se,{name:e,setName:t,placeholder:"hash name, e.g. profile"}),s.jsxs("label",{className:"stack",children:["field",s.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"field name, e.g. email"})]}),s.jsxs("label",{className:"stack",children:["value",s.jsx("input",{value:i,onChange:h=>u(h.target.value),placeholder:"field value, e.g. a@b"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("hset",{field:l,value:i}),children:"HSet"}),s.jsx("button",{className:"ghost",onClick:()=>n("hget",{field:l}),children:"HGet"}),s.jsx("button",{className:"ghost",onClick:()=>n("hdel",{field:l}),children:"HDel"}),s.jsx("button",{className:"ghost",onClick:()=>n("hgetall"),children:"HGetAll"})]}),a.map(h=>s.jsxs("div",{className:"note",children:[h.field," = ",h.value]},h.field))]})}function np({name:e,setName:t,run:n,last:r}){var c;const[l,o]=z.useState("$.name"),[i,u]=z.useState('"Ada"'),a=(c=r==null?void 0:r.result)==null?void 0:c.raw;return s.jsxs("div",{children:[s.jsx(ue,{when:"a nested document with path updates.",not:"per-field concurrency — use Hash."}),s.jsx(se,{name:e,setName:t,placeholder:"document name, e.g. doc"}),s.jsxs("label",{className:"stack",children:["path",s.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"JSON path, e.g. $.name or $"})]}),s.jsxs("label",{className:"stack",children:["JSON value",s.jsx("input",{value:i,onChange:h=>u(h.target.value),placeholder:'raw JSON, e.g. "Ada" or {"ok":true}'})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("jsonset",{path:l,value:i}),children:"Set"}),s.jsx("button",{className:"ghost",onClick:()=>n("jsonget",{path:"$"}),children:"Get $"}),s.jsx("button",{className:"ghost",onClick:()=>n("jsondel",{path:l}),children:"Del path"})]}),a&&s.jsx("pre",{className:"result",children:a})]})}function rp({name:e,setName:t,run:n,last:r}){var u;const[l,o]=z.useState("event1"),i=((u=r==null?void 0:r.result)==null?void 0:u.items)??[];return s.jsxs("div",{children:[s.jsx(ue,{when:"a queue or timeline.",not:"a set — order and duplicates matter."}),s.jsx(se,{name:e,setName:t,placeholder:"list name, e.g. inbox"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:a=>o(a.target.value),placeholder:"list element, e.g. event1"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("lpush",{item:l}),children:"LPush"}),s.jsx("button",{onClick:()=>n("rpush",{item:l}),children:"RPush"}),s.jsx("button",{className:"ghost",onClick:()=>n("lpop"),children:"LPop"}),s.jsx("button",{className:"ghost",onClick:()=>n("rpop"),children:"RPop"}),s.jsx("button",{className:"ghost",onClick:()=>n("lrange",{start:0,stop:-1}),children:"LRange"})]}),s.jsx("div",{className:"row",children:i.map((a,c)=>s.jsx("code",{children:a},c))})]})}function lp({name:e,setName:t,run:n,cluster:r}){return s.jsxs("div",{children:[s.jsx(ue,{when:"cache a backend (SoT) on miss, with singleflight.",not:"CacheOnly — a miss here loads."}),s.jsx(se,{name:e,setName:t,placeholder:"key to load, e.g. chart"}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("get"),children:"Get (may load SoT)"}),s.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete / invalidate"}),s.jsxs("span",{className:"note",children:["SoT loads: ",(r==null?void 0:r.sot_loads)??0]})]})]})}function op({name:e,setName:t,run:n,last:r}){var u;const[l,o]=z.useState("dark_mode"),i=((u=r==null?void 0:r.result)==null?void 0:u.members)??[];return s.jsxs("div",{children:[s.jsx(ue,{when:"exact membership.",not:"a Bloom filter, and not Get/Put."}),s.jsx(se,{name:e,setName:t,placeholder:"set name, e.g. flags"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:a=>o(a.target.value),placeholder:"exact member, e.g. dark_mode"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("sadd",{item:l}),children:"Add"}),s.jsx("button",{className:"ghost",onClick:()=>n("srem",{item:l}),children:"Remove"}),s.jsx("button",{className:"ghost",onClick:()=>n("sismember",{item:l}),children:"Contains"}),s.jsx("button",{className:"ghost",onClick:()=>n("smembers"),children:"Members"}),s.jsx("button",{className:"ghost",onClick:()=>n("get"),children:"Wrong verb (Get)"})]}),i.length>0&&s.jsx("p",{className:"note",children:i.join(", ")})]})}function ip({name:e,setName:t,run:n,last:r}){var a;const[l,o]=z.useState("t001"),i=((a=r==null?void 0:r.result)==null?void 0:a.entries)??[],u=Math.max(1,...i.map(c=>c.count));return s.jsxs("div",{children:[s.jsx(ue,{when:"heavy hitters from a stream.",not:"ZAdd — you do not write the score."}),s.jsx(se,{name:e,setName:t,placeholder:"table name, e.g. hot"}),s.jsxs("label",{className:"stack",children:["item",s.jsx("input",{value:l,onChange:c=>o(c.target.value),placeholder:"observation id, e.g. t001"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("topkadd",{item:l}),children:"Observe"}),s.jsx("button",{className:"ghost",onClick:()=>n("topklist"),children:"List"})]}),s.jsx("div",{className:"bars",children:i.map(c=>s.jsx("div",{className:"bar",style:{height:`${c.count/u*100}%`},title:`${c.item} ${c.count}`},c.item))})]})}function up({name:e,setName:t,run:n,last:r}){var g,S,N,P;const[l,o]=z.useState("hello"),[i,u]=z.useState("-"),[a,c]=z.useState("+"),[h,v]=z.useState(0),[m,x]=z.useState(""),[y,w]=z.useState(2),L=(g=r==null?void 0:r.result)==null?void 0:g.id,d=((S=r==null?void 0:r.result)==null?void 0:S.entries)??[],f=(N=r==null?void 0:r.result)==null?void 0:N.n,p=(P=r==null?void 0:r.result)==null?void 0:P.present;return s.jsxs("div",{children:[s.jsx(ue,{when:"an append-only log you resume by id.",not:"a List — pop removes and indexes shift."}),s.jsx(se,{name:e,setName:t,placeholder:"stream name, e.g. logs"}),s.jsxs("label",{className:"stack",children:["payload",s.jsx("input",{value:l,onChange:C=>o(C.target.value),placeholder:"opaque bytes, e.g. hello"})]}),s.jsx("div",{className:"row",children:s.jsx("button",{onClick:async()=>{var j;const F=(j=(await n("xadd",{value:l})).result)==null?void 0:j.id;F&&x(F)},children:"XAdd"})}),s.jsxs("label",{className:"stack",children:["start",s.jsx("input",{value:i,onChange:C=>u(C.target.value),placeholder:"- or millis-seq or (id"})]}),s.jsxs("label",{className:"stack",children:["end",s.jsx("input",{value:a,onChange:C=>c(C.target.value),placeholder:"+ or millis-seq"})]}),s.jsxs("label",{className:"stack",children:["count",s.jsx("input",{type:"number",value:h,onChange:C=>v(Number(C.target.value)),placeholder:"0 = no cap, e.g. 10"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("xrange",{start:i,end:a,count:h}),children:"XRange"}),s.jsx("button",{className:"ghost",onClick:()=>n("xrevrange",{start:i,end:a,count:h}),children:"XRevRange"}),s.jsx("button",{className:"ghost",onClick:()=>n("xlen"),children:"XLen"})]}),s.jsxs("label",{className:"stack",children:["id",s.jsx("input",{value:m,onChange:C=>x(C.target.value),placeholder:"millis-seq, e.g. 1710000000000-0"})]}),s.jsxs("label",{className:"stack",children:["maxLen",s.jsx("input",{type:"number",value:y,onChange:C=>w(Number(C.target.value)),placeholder:"keep newest N, e.g. 2"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{className:"ghost",onClick:()=>n("xdel",{id:m}),children:"XDel"}),s.jsx("button",{className:"ghost",onClick:()=>n("xtrim",{max_len:y}),children:"XTrim"}),s.jsx("button",{className:"ghost",onClick:()=>n("delete"),children:"Delete stream"})]}),L&&s.jsxs("p",{className:"note",children:["id ",L]}),p!==void 0&&f!==void 0&&s.jsxs("p",{className:"note",children:["len ",f,p?"":" (missing)"]}),s.jsx("div",{className:"stack",children:d.map(C=>s.jsxs("code",{children:[C.id," ",C.payload]},C.id))})]})}function sp({name:e,setName:t,run:n,last:r}){var x;const[l,o]=z.useState("east"),[i,u]=z.useState(1),[a,c]=z.useState(0),[h,v]=z.useState([]),m=((x=r==null?void 0:r.result)==null?void 0:x.hits)??[];return s.jsxs("div",{children:[s.jsx(ue,{when:"small in-memory K-NN.",not:"HNSW / Faiss — brute force under the store mutex."}),s.jsx(se,{name:e,setName:t,placeholder:"set name, e.g. items"}),s.jsxs("label",{className:"stack",children:["member",s.jsx("input",{value:l,onChange:y=>o(y.target.value),placeholder:"vector id, e.g. east"})]}),s.jsxs("label",{className:"stack",children:["x (dim 0)",s.jsx("input",{type:"number",step:"0.1",value:i,onChange:y=>u(Number(y.target.value)),placeholder:"float32, e.g. 1"})]}),s.jsxs("label",{className:"stack",children:["y (dim 1)",s.jsx("input",{type:"number",step:"0.1",value:a,onChange:y=>c(Number(y.target.value)),placeholder:"float32, e.g. 0"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:async()=>{await n("vadd",{member:l,vec:[i,a]}),v(y=>[...y.filter(w=>w.member!==l),{member:l,x:i,y:a}])},children:"VAdd"}),s.jsx("button",{className:"ghost",onClick:()=>n("vsim",{vec:[i,a],k:3}),children:"VSim"}),s.jsx("button",{className:"ghost",onClick:()=>n("vrem",{member:l}),children:"VRem"})]}),s.jsxs("svg",{className:"plot",viewBox:"-1.2 -1.2 2.4 2.4",children:[s.jsx("line",{x1:"-1.2",y1:"0",x2:"1.2",y2:"0",stroke:"#334155"}),s.jsx("line",{x1:"0",y1:"-1.2",x2:"0",y2:"1.2",stroke:"#334155"}),h.map(y=>s.jsx("circle",{cx:y.x,cy:-y.y,r:"0.07",fill:"#38bdf8"},y.member)),s.jsx("line",{x1:"0",y1:"0",x2:i,y2:-a,stroke:"#fbbf24",strokeWidth:"0.03"})]}),m.length>0&&s.jsx("p",{className:"note",children:m.map(y=>`${y.member} ${y.score.toFixed(3)}`).join(" · ")})]})}function ap({name:e,setName:t,run:n,last:r}){var c;const[l,o]=z.useState("alice"),[i,u]=z.useState(100),a=((c=r==null?void 0:r.result)==null?void 0:c.members)??[];return s.jsxs("div",{children:[s.jsx(ue,{when:"an exact scored ranking you write.",not:"TopK — those are observations, not scores."}),s.jsx(se,{name:e,setName:t,placeholder:"zset name, e.g. board"}),s.jsxs("label",{className:"stack",children:["member",s.jsx("input",{value:l,onChange:h=>o(h.target.value),placeholder:"member id, e.g. alice"})]}),s.jsxs("label",{className:"stack",children:["score",s.jsx("input",{type:"number",value:i,onChange:h=>u(Number(h.target.value)),placeholder:"float score, e.g. 100"})]}),s.jsxs("div",{className:"row",children:[s.jsx("button",{onClick:()=>n("zadd",{member:l,score:i}),children:"ZAdd"}),s.jsx("button",{className:"ghost",onClick:()=>n("zrem",{member:l}),children:"ZRem"}),s.jsx("button",{className:"ghost",onClick:()=>n("zrange",{start:0,stop:-1}),children:"ZRange"})]}),a.length>0&&s.jsx("table",{children:s.jsx("tbody",{children:a.map(h=>s.jsxs("tr",{children:[s.jsx("td",{children:h.member}),s.jsx("td",{children:h.score})]},h.member))})})]})}function cp(e){var n;const t={name:e.name,setName:e.setName,via:e.via,run:e.run,last:e.last,cluster:e.cluster};return s.jsxs("section",{className:"play",children:[s.jsx("div",{className:"section-label",children:"Controls"}),s.jsxs("div",{className:"row",children:[s.jsx("h2",{children:e.chapter.label}),s.jsxs("label",{children:["ingress",s.jsx("select",{value:e.via,onChange:r=>e.setVia(r.target.value),children:(((n=e.cluster)==null?void 0:n.nodes)??[]).map(r=>s.jsx("option",{value:r.id,children:r.id},r.id))})]}),s.jsx("button",{onClick:e.onScene,children:"Run scene"})]}),s.jsx(fp,{id:e.chapter.id,w:t})]})}function fp({id:e,w:t}){switch(e){case"loadthrough":return s.jsx(lp,{...t});case"bloom":return s.jsx(Yd,{...t});case"set":return s.jsx(op,{...t});case"zset":return s.jsx(ap,{...t});case"geo":return s.jsx(bd,{...t});case"list":return s.jsx(rp,{...t});case"hash":return s.jsx(tp,{...t});case"counter":return s.jsx(Jd,{...t});case"json":return s.jsx(np,{...t});case"bitmap":return s.jsx(Xd,{...t});case"hll":return s.jsx(ep,{...t});case"topk":return s.jsx(ip,{...t});case"cms":return s.jsx(Gd,{...t});case"vectorset":return s.jsx(sp,{...t});case"stream":return s.jsx(up,{...t});default:return s.jsx(Zd,{...t})}}function dp({view:e,last:t}){const n=(e==null?void 0:e.nodes)??[];return s.jsxs("section",{className:"canvas",children:[s.jsxs("div",{className:"nodes",children:[n.map(r=>{const l=["node",r.role,r.kind].join(" ");return s.jsxs("article",{className:l,children:[s.jsx("div",{className:"id",children:r.id}),s.jsx("div",{className:"meta",children:r.cache}),s.jsxs("div",{className:"meta",children:[r.role," · v",r.version," · ",r.bytes,"B"]}),s.jsx("span",{className:"kind "+r.kind,children:r.kind})]},r.id)}),n.length===0&&s.jsx("p",{className:"muted",children:"No backend. Connect cache gRPC addresses above, or start a local 3-node mesh."})]}),s.jsx("div",{className:"trace",children:((t==null?void 0:t.trace)??["Run a chapter or a verb — the mesh observation lands here."]).map(r=>s.jsx("div",{children:r},r))})]})}function pp(){const[e,t]=z.useState(Wd),n=z.useMemo(()=>Gt.find(j=>j.id===e)??Gt[0],[e]),[r,l]=z.useState(null),[o,i]=z.useState(null),[u,a]=z.useState(null),[c,h]=z.useState(""),[v,m]=z.useState(n.name),[x,y]=z.useState(!1),[w,L]=z.useState(!1),[d,f]=z.useState(()=>localStorage.getItem("lab.addrs")||"127.0.0.1:9000"),[p,g]=z.useState(""),S=z.useCallback(async()=>{var R;const j=await Dd();return l(j),j.nodes[0]&&!j.nodes.some(pe=>pe.id===c)&&h(j.nodes[0].id),(R=j.addrs)!=null&&R.length&&f(j.addrs.join(",")),j},[c]),N=z.useCallback(async(j=n.ks,R=v)=>{!j||!R||i(await $d(j,R))},[n.ks,v]);z.useEffect(()=>{S().then(()=>N())},[S,N]);function P(j){const R=Gt.find(pe=>pe.id===j)??Gt[0];t(R.id),Hd(R.id),m(R.name),a(null),N(R.ks,R.name)}async function C(j,R={}){L(!0);try{x&&await new Promise(xt=>setTimeout(xt,400));const pe=await Ad(n.ks,j,v,R,c);return a(pe),pe.after?i(pe.after):await N(),await S(),pe}finally{L(!1)}}async function F(){L(!0);try{const j=await Vd(n.id),R=j.steps[j.steps.length-1];R!=null&&R.resp&&(a(R.resp),R.resp.after&&i(R.resp.after)),await S()}finally{L(!1)}}return s.jsxs("div",{className:"shell",children:[s.jsxs("header",{className:"top",children:[s.jsx("h1",{children:"SuperCache Lab"}),s.jsxs("span",{className:"muted",children:[(r==null?void 0:r.mode)??"disconnected",r!=null&&r.connected?` · ${r.nodes.length} node(s)`:""]}),s.jsx("input",{className:"top-addrs",value:d,onChange:j=>f(j.target.value),placeholder:"cache gRPC, e.g. 127.0.0.1:9000,127.0.0.1:9010",title:p||"Comma-separated cache gRPC addresses"}),s.jsx("button",{type:"button",disabled:w,onClick:()=>{L(!0),g(""),localStorage.setItem("lab.addrs",d),Ku({addrs:d}).then(j=>{var R;return l(j),h(((R=j.nodes[0])==null?void 0:R.id)??""),a(null),N()}).catch(j=>g(j.message)).finally(()=>L(!1))},children:"Connect"}),s.jsx("button",{type:"button",className:"ghost",disabled:w,onClick:()=>{L(!0),g(""),Ku({in_process:!0}).then(j=>{var R;return l(j),h(((R=j.nodes[0])==null?void 0:R.id)??""),a(null),N()}).catch(j=>g(j.message)).finally(()=>L(!1))},children:"Local 3-node"}),s.jsx("button",{type:"button",className:"ghost",disabled:w||!(r!=null&&r.connected),onClick:()=>{L(!0),g(""),Fd().then(j=>{l(j),h(""),i(null),a(null)}).catch(j=>g(j.message)).finally(()=>L(!1))},children:"Disconnect"}),p&&s.jsx("span",{className:"bloom-miss",children:p}),s.jsx("span",{className:"grow"}),s.jsxs("label",{className:"muted",children:[s.jsx("input",{type:"checkbox",checked:x,onChange:j=>y(j.target.checked)})," slow-mo"]}),s.jsx("button",{className:"ghost",disabled:w,onClick:()=>{Bd().then(()=>{a(null),N(),S()})},children:"Reset"})]}),s.jsx(Qd,{current:n.id,onPick:P}),s.jsx(dp,{view:o,last:u}),s.jsxs("aside",{className:"sidebar",children:[s.jsx(cp,{chapter:n,via:c,setVia:h,cluster:r,name:v,setName:m,run:C,last:u,onScene:()=>void F()}),s.jsx(Kd,{cluster:r,view:o,last:u,name:v,setName:m,onRefresh:()=>void N()})]})]})}Yl.createRoot(document.getElementById("root")).render(s.jsx(jc.StrictMode,{children:s.jsx(pp,{})})); diff --git a/examples/lab/ui/dist/index.html b/examples/lab/ui/dist/index.html index ebf8351..6422b51 100644 --- a/examples/lab/ui/dist/index.html +++ b/examples/lab/ui/dist/index.html @@ -4,7 +4,7 @@ SuperCache Lab - + diff --git a/examples/lab/ui/src/Playground.tsx b/examples/lab/ui/src/Playground.tsx index 2f96d5b..73e9144 100644 --- a/examples/lab/ui/src/Playground.tsx +++ b/examples/lab/ui/src/Playground.tsx @@ -12,6 +12,7 @@ import { ListWidget } from "./widgets/List"; import { LoadThroughWidget } from "./widgets/LoadThrough"; import { SetWidget } from "./widgets/Set"; import { TopKWidget } from "./widgets/TopK"; +import { StreamWidget } from "./widgets/Stream"; import { VectorSetWidget } from "./widgets/VectorSet"; import { ZSetWidget } from "./widgets/ZSet"; import type { WidgetProps } from "./widgets/shared"; @@ -87,6 +88,8 @@ function ModeWidget({ id, w }: { id: string; w: WidgetProps }) { return ; case "vectorset": return ; + case "stream": + return ; default: return ; } diff --git a/examples/lab/ui/src/api.ts b/examples/lab/ui/src/api.ts index a90b601..9aae00a 100644 --- a/examples/lab/ui/src/api.ts +++ b/examples/lab/ui/src/api.ts @@ -84,6 +84,7 @@ export const CHAPTERS: Chapter[] = [ { id: "topk", label: "TopK", ks: "topk", name: "hot" }, { id: "cms", label: "CMS", ks: "cms", name: "freq" }, { id: "vectorset", label: "VectorSet", ks: "vectorset", name: "items" }, + { id: "stream", label: "Stream", ks: "stream", name: "logs" }, ]; export async function getCluster(): Promise { diff --git a/examples/lab/ui/src/widgets/Stream.tsx b/examples/lab/ui/src/widgets/Stream.tsx new file mode 100644 index 0000000..5c5c610 --- /dev/null +++ b/examples/lab/ui/src/widgets/Stream.tsx @@ -0,0 +1,102 @@ +import { useState } from "react"; +import { NameRow, Note, type WidgetProps } from "./shared"; + +type Row = { id: string; payload: string }; + +export function StreamWidget({ name, setName, run, last }: WidgetProps) { + const [payload, setPayload] = useState("hello"); + const [start, setStart] = useState("-"); + const [end, setEnd] = useState("+"); + const [count, setCount] = useState(0); + const [id, setId] = useState(""); + const [maxLen, setMaxLen] = useState(2); + const minted = (last?.result as { id?: string } | undefined)?.id; + const entries = ((last?.result as { entries?: Row[] } | undefined)?.entries) ?? []; + const n = (last?.result as { n?: number; present?: boolean } | undefined)?.n; + const present = (last?.result as { present?: boolean } | undefined)?.present; + return ( +
+ + + +
+ +
+ + + +
+ + + +
+ + +
+ + + +
+ {minted &&

id {minted}

} + {present !== undefined && n !== undefined && ( +

+ len {n} + {!present ? " (missing)" : ""} +

+ )} +
+ {entries.map((e) => ( + + {e.id} {e.payload} + + ))} +
+
+ ); +}