From 6fa13a06411048f3217397f4285b3e64e7b9ee58 Mon Sep 17 00:00:00 2001 From: Adam Mathes Date: Sat, 14 Feb 2026 09:42:14 -0800 Subject: feature: implement full OPML and Text import/export (fixing NK-r6nhj0) --- .thicket/tickets.jsonl | 1 + api/api.go | 52 ++++++++++++++- frontend/src/components/Settings.css | 74 +++++++++++++++++++++ frontend/src/components/Settings.tsx | 64 ++++++++++++++++-- internal/exporter/exporter.go | 91 +++++++++++++++++++++---- internal/importer/import_format_test.go | 97 +++++++++++++++++++++++++++ internal/importer/importer.go | 113 +++++++++++++++++++++++++++++--- web/dist/v2/assets/index-6v9VVvST.css | 1 + web/dist/v2/assets/index-B49AI1I_.css | 1 - web/dist/v2/assets/index-Gb6N44HC.js | 11 ---- web/dist/v2/assets/index-eKdiad4e.js | 11 ++++ web/dist/v2/index.html | 4 +- 12 files changed, 479 insertions(+), 41 deletions(-) create mode 100644 internal/importer/import_format_test.go create mode 100644 web/dist/v2/assets/index-6v9VVvST.css delete mode 100644 web/dist/v2/assets/index-B49AI1I_.css delete mode 100644 web/dist/v2/assets/index-Gb6N44HC.js create mode 100644 web/dist/v2/assets/index-eKdiad4e.js diff --git a/.thicket/tickets.jsonl b/.thicket/tickets.jsonl index 4851eb2..9d027bf 100644 --- a/.thicket/tickets.jsonl +++ b/.thicket/tickets.jsonl @@ -77,6 +77,7 @@ {"id":"NK-t0nmbj","title":"new web frontend","description":"The current frontend uses an old version of backbone and jquery. Let's \"deprecate\" it -- keep it arouond so we can test against it and use it, but let's be able to also serve and use a nice shiny new frontend written in either simiple, highly efficient vanilla javascript, or put together something in react or similar. Needs to feel fast and low latency!\n\nIt's very important that this new frontend has all the functionality of the existing one AND looks similar (use same style, etc, but adjust a little if needed.)\n\nALSO make it highly testable and have high test coverage as you go. I don't want it to use the Chrome browser plugin thing, just test it on your own using things from the command line you can do.","type":"epic","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-13T02:01:37.2107893Z","updated":"2026-02-13T05:43:47.613995925Z"} {"id":"NK-thq2oq","title":"v2 ui - font size adjustments","description":"Move font-size: 18px to :root so rem units resolve correctly. Adjust title size to ~24px.","type":"bug","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-14T03:30:58.751447802Z","updated":"2026-02-14T03:31:56.358775833Z"} {"id":"NK-tw0nga","title":"E2E Testing","description":"Set up E2E testing with Playwright or Cypress to verify full flows: Login -\u003e View Feeds -\u003e View Items -\u003e Logout","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-13T15:01:33.817314728Z","updated":"2026-02-13T15:46:57.094062908Z"} +{"id":"NK-ucckki","title":"security changes broke legacy","description":"I think some of the security policies make it so the old legacy one doesn't work. this may just be WAI but have a look\n\n[Warning] jQuery.Deferred exception: Refused to evaluate a string as JavaScript because 'unsafe-eval' or 'trusted-types-eval' is not an allowed source of script in the following Content Security Policy directive: \"script-src 'self'\". (jquery-3.3.1.min.js, line 2)\n (2)\n\"Function@[native code]\no@http://localhost:4994/static/jquery.tmpl.min.js:10:3543\ntemplate@http://localhost:4994/static/jquery.tmpl.min.js:10:1914\ntmpl@http://localhost:4994/static/jquery.tmpl.min.js:10:1422\nrender@http://localhost:4994/static/ui.js:208:23\nnr@http://localhost:4994/static/underscore-1.13.1.min.js:6:7308\n@http://localhost:4994/static/underscore-1.13.1.min.js:6:7733\n@http://localhost:4994/static/underscore-1.13.1.min.js:6:786\nboot@http://localhost:4994/static/ui.js:598:28\n@http://localhost:4994/static/ui.js:8:9\nl@http://localhost:4994/static/jquery-3.3.1.min.js:2:29380\n@http://localhost:4994/static/jquery-3.3.1.min.js:2:29678\"\nundefined","type":"bug","status":"open","priority":2,"labels":null,"assignee":"","created":"2026-02-14T17:41:02.255772514Z","updated":"2026-02-14T17:41:02.255772514Z"} {"id":"NK-uy90he","title":"UI Styling: Feed Items (Spacing, Dateline)","description":"","type":"","status":"closed","priority":2,"labels":null,"assignee":"","created":"2026-02-13T18:05:17.289457994Z","updated":"2026-02-13T18:11:46.255816698Z"} {"id":"NK-uywybr","title":"https://computer.rip/rss.xml fails to importa","description":"running neko -a https://computer.rip/rss.xml gave an error. debug it and add test case to catch.","type":"bug","status":"closed","priority":1,"labels":null,"assignee":"","created":"2026-02-13T20:12:28.54350403Z","updated":"2026-02-14T01:03:02.755247954Z"} {"id":"NK-wibjlg","title":"update README.md","description":"Ensure the build, configuration, etc are up too date.\nNote the git change when we started to vibe-code this in the history (with dates etc.)","type":"task","status":"closed","priority":0,"labels":null,"assignee":"","created":"2026-02-13T20:18:08.790048498Z","updated":"2026-02-13T22:36:07.717448961Z"} diff --git a/api/api.go b/api/api.go index 5e7618d..9ea35c8 100644 --- a/api/api.go +++ b/api/api.go @@ -2,6 +2,7 @@ package api import ( "encoding/json" + "fmt" "log" "net/http" "strconv" @@ -10,6 +11,7 @@ import ( "adammathes.com/neko/config" "adammathes.com/neko/internal/crawler" "adammathes.com/neko/internal/exporter" + "adammathes.com/neko/internal/importer" "adammathes.com/neko/models/feed" "adammathes.com/neko/models/item" ) @@ -36,6 +38,7 @@ func (s *Server) routes() { s.HandleFunc("/feed/", s.HandleFeed) s.HandleFunc("/tag", s.HandleCategory) s.HandleFunc("/export/", s.HandleExport) + s.HandleFunc("/import", s.HandleImport) s.HandleFunc("/crawl", s.HandleCrawl) } @@ -217,10 +220,57 @@ func (s *Server) HandleExport(w http.ResponseWriter, r *http.Request) { jsonError(w, "format required", http.StatusBadRequest) return } - w.Header().Set("Content-Type", "text/plain") // exporter handles formats internally + + contentType := "text/plain" + extension := "txt" + switch format { + case "opml": + contentType = "application/xml" + extension = "opml" + case "json": + contentType = "application/json" + extension = "json" + case "html": + contentType = "text/html" + extension = "html" + } + + w.Header().Set("Content-Type", contentType) + w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=neko_export.%s", extension)) w.Write([]byte(exporter.ExportFeeds(format))) } +func (s *Server) HandleImport(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + jsonError(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + format := r.FormValue("format") + if format == "" { + format = "opml" // default to opml + } + + file, _, err := r.FormFile("file") + if err != nil { + jsonError(w, "file required", http.StatusBadRequest) + return + } + defer file.Close() + + err = importer.ImportFeeds(format, file) + if err != nil { + log.Println(err) + jsonError(w, "import failed: "+err.Error(), http.StatusInternalServerError) + return + } + + // Trigger crawl after import + go crawler.Crawl() + + jsonResponse(w, map[string]string{"status": "ok"}) +} + func (s *Server) HandleCrawl(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { jsonError(w, "method not allowed", http.StatusMethodNotAllowed) diff --git a/frontend/src/components/Settings.css b/frontend/src/components/Settings.css index 171dcad..ec6fc83 100644 --- a/frontend/src/components/Settings.css +++ b/frontend/src/components/Settings.css @@ -84,4 +84,78 @@ .delete-btn:disabled { background: #ffcdd2; cursor: not-allowed; +} + +.import-export-section { + display: flex; + gap: 2rem; + margin-bottom: 2rem; +} + +@media (max-width: 600px) { + .import-export-section { + flex-direction: column; + } +} + +.import-section, +.export-section { + flex: 1; + background: var(--sidebar-bg); + padding: 1.5rem; + border-radius: 8px; + border: 1px solid var(--border-color); +} + +.import-form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.file-input { + font-size: 0.9rem; + max-width: 100%; +} + +.export-buttons { + display: flex; + gap: 1rem; + flex-wrap: wrap; +} + +.export-btn { + display: inline-block; + padding: 0.5rem 1rem; + background: var(--bg-color); + color: var(--link-color); + text-decoration: none; + border: 1px solid var(--border-color); + border-radius: 4px; + font-weight: bold; + text-align: center; + min-width: 70px; +} + +.export-btn:hover { + background: var(--sidebar-bg); +} + +button { + cursor: pointer; + padding: 0.5rem 1rem; + border-radius: 4px; + border: 1px solid var(--border-color); + background: var(--bg-color); + color: var(--text-color); + font-weight: bold; +} + +button:hover:not(:disabled) { + background: var(--sidebar-bg); +} + +button:disabled { + opacity: 0.5; + cursor: not-allowed; } \ No newline at end of file diff --git a/frontend/src/components/Settings.tsx b/frontend/src/components/Settings.tsx index 3f508e9..6b6dab1 100644 --- a/frontend/src/components/Settings.tsx +++ b/frontend/src/components/Settings.tsx @@ -9,6 +9,8 @@ export default function Settings() { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); + const [importFile, setImportFile] = useState(null); + const fetchFeeds = () => { setLoading(true); apiFetch('/api/feed/') @@ -30,8 +32,6 @@ export default function Settings() { fetchFeeds(); }, []); - - const handleAddFeed = (e: React.FormEvent) => { e.preventDefault(); if (!newFeedUrl) return; @@ -48,7 +48,7 @@ export default function Settings() { }) .then(() => { setNewFeedUrl(''); - fetchFeeds(); // Refresh list (or we could append if server returns full feed object) + fetchFeeds(); }) .catch((err) => { setError(err.message); @@ -74,6 +74,34 @@ export default function Settings() { }); }; + const handleImport = (e: React.FormEvent) => { + e.preventDefault(); + if (!importFile) return; + + setLoading(true); + const formData = new FormData(); + formData.append('file', importFile); + formData.append('format', 'opml'); + + apiFetch('/api/import', { + method: 'POST', + body: formData, + }) + .then((res) => { + if (!res.ok) throw new Error('Failed to import feeds'); + return res.json(); + }) + .then(() => { + setImportFile(null); + fetchFeeds(); + alert('Import successful!'); + }) + .catch((err) => { + setError(err.message); + setLoading(false); + }); + }; + return (

Settings

@@ -94,9 +122,37 @@ export default function Settings() { Add Feed - {error &&

{error}

}
+
+
+

Import Feeds (OPML)

+
+ setImportFile(e.target.files?.[0] || null)} + className="file-input" + disabled={loading} + /> + +
+
+ +
+

Export Feeds

+
+ OPML + Text + JSON +
+
+
+ + {error &&

{error}

} +

Manage Feeds

{loading &&

Loading...

} diff --git a/internal/exporter/exporter.go b/internal/exporter/exporter.go index 9172fec..2d32fdb 100644 --- a/internal/exporter/exporter.go +++ b/internal/exporter/exporter.go @@ -1,39 +1,99 @@ package exporter import ( - "adammathes.com/neko/models/feed" "bytes" "encoding/json" "encoding/xml" "fmt" "html/template" + + "adammathes.com/neko/models/feed" ) +type OPML struct { + XMLName xml.Name `xml:"opml"` + Version string `xml:"version,attr"` + Head struct { + Title string `xml:"title"` + } `xml:"head"` + Body struct { + Outlines []Outline `xml:"outline"` + } `xml:"body"` +} + +type Outline struct { + XMLName xml.Name `xml:"outline"` + Text string `xml:"text,attr"` + Title string `xml:"title,attr,omitempty"` + Type string `xml:"type,attr,omitempty"` + XMLURL string `xml:"xmlUrl,attr,omitempty"` + HTMLURL string `xml:"htmlUrl,attr,omitempty"` + Outlines []Outline `xml:"outline,omitempty"` +} + func ExportFeeds(format string) string { feeds, err := feed.All() if err != nil { - panic(err) + return "" } - s := "" switch format { case "text": + var b bytes.Buffer for _, f := range feeds { - s = s + fmt.Sprintf("%s\n", f.Url) + fmt.Fprintf(&b, "%s\n", f.Url) } + return b.String() case "opml": - s = s + fmt.Sprintf(`neko feeds`) - s = s + fmt.Sprintf("\n") + var o OPML + o.Version = "2.0" + o.Head.Title = "neko feeds" + + // Group by category + cats := make(map[string][]*feed.Feed) + var noCat []*feed.Feed for _, f := range feeds { - b, _ := xml.Marshal(f) - s = s + fmt.Sprintf("%s\n", string(b)) + if f.Category != "" { + cats[f.Category] = append(cats[f.Category], f) + } else { + noCat = append(noCat, f) + } } - s = s + fmt.Sprintf(``) + + for cat, fds := range cats { + out := Outline{Text: cat} + for _, f := range fds { + out.Outlines = append(out.Outlines, Outline{ + Text: f.Title, + Title: f.Title, + Type: "rss", + XMLURL: f.Url, + HTMLURL: f.WebUrl, + }) + } + o.Body.Outlines = append(o.Body.Outlines, out) + } + + for _, f := range noCat { + o.Body.Outlines = append(o.Body.Outlines, Outline{ + Text: f.Title, + Title: f.Title, + Type: "rss", + XMLURL: f.Url, + HTMLURL: f.WebUrl, + }) + } + + b, err := xml.MarshalIndent(o, "", " ") + if err != nil { + return "" + } + return xml.Header + string(b) case "json": - js, _ := json.Marshal(feeds) - s = fmt.Sprintf("%s\n", js) + js, _ := json.MarshalIndent(feeds, "", " ") + return string(js) case "html": htmlTemplateString := ` @@ -50,12 +110,15 @@ func ExportFeeds(format string) string { ` var bts bytes.Buffer htmlTemplate, err := template.New("feeds").Parse(htmlTemplateString) + if err != nil { + return "" + } err = htmlTemplate.Execute(&bts, feeds) if err != nil { - panic(err) + return "" } - s = bts.String() + return bts.String() } - return s + return "" } diff --git a/internal/importer/import_format_test.go b/internal/importer/import_format_test.go new file mode 100644 index 0000000..9176383 --- /dev/null +++ b/internal/importer/import_format_test.go @@ -0,0 +1,97 @@ +package importer + +import ( + "strings" + "testing" + + "path/filepath" + + "adammathes.com/neko/config" + "adammathes.com/neko/models" + "adammathes.com/neko/models/feed" +) + +func TestImportOPML(t *testing.T) { + config.Config.DBFile = filepath.Join(t.TempDir(), "test.db") + models.InitDB() + defer models.DB.Close() + + opmlContent := ` + + + testing import + + + + + + + + +` + + err := ImportOPML(strings.NewReader(opmlContent)) + if err != nil { + t.Fatalf("ImportOPML failed: %v", err) + } + + feeds, err := feed.All() + if err != nil { + t.Fatal(err) + } + + if len(feeds) != 3 { + t.Errorf("Expected 3 feeds, got %d", len(feeds)) + } + + foundArs := false + foundXKCD := false + for _, f := range feeds { + if f.Url == "https://arstechnica.com/feed/" { + foundArs = true + if f.Category != "Tech" { + t.Errorf("Expected category 'Tech' for Ars, got %q", f.Category) + } + } + if f.Url == "https://xkcd.com/rss.xml" { + foundXKCD = true + if f.Category != "" { + t.Errorf("Expected empty category for XKCD, got %q", f.Category) + } + } + } + + if !foundArs { + t.Error("Did not find Ars Technica in imported feeds") + } + if !foundXKCD { + t.Error("Did not find XKCD in imported feeds") + } +} + +func TestImportText(t *testing.T) { + config.Config.DBFile = filepath.Join(t.TempDir(), "test.db") + models.InitDB() + defer models.DB.Close() + + textContent := ` +https://example.com/feed1 +# comment +https://example.com/feed2 + https://example.com/feed3 +` + + err := ImportText(strings.NewReader(textContent)) + if err != nil { + t.Fatalf("ImportText failed: %v", err) + } + + feeds, err := feed.All() + if err != nil { + t.Fatal(err) + } + + if len(feeds) != 3 { + t.Errorf("Expected 3 feeds, got %d", len(feeds)) + } +} diff --git a/internal/importer/importer.go b/internal/importer/importer.go index 73a2cd8..f74ace1 100644 --- a/internal/importer/importer.go +++ b/internal/importer/importer.go @@ -1,12 +1,14 @@ package importer import ( - // "bufio" + "bufio" "encoding/json" - //"fmt" + "encoding/xml" + "errors" "io" "log" "os" + "strings" "adammathes.com/neko/models/feed" "adammathes.com/neko/models/item" @@ -32,15 +34,101 @@ type IDate struct { Date string `json:"$date"` } -func ImportJSON(filename string) error { +type OPML struct { + XMLName xml.Name `xml:"opml"` + Version string `xml:"version,attr"` + Head struct { + Title string `xml:"title"` + } `xml:"head"` + Body struct { + Outlines []Outline `xml:"outline"` + } `xml:"body"` +} - f, err := os.Open(filename) - if err != nil { +type Outline struct { + Text string `xml:"text,attr"` + Title string `xml:"title,attr"` + Type string `xml:"type,attr"` + XMLURL string `xml:"xmlUrl,attr"` + HTMLURL string `xml:"htmlUrl,attr"` + Category string `xml:"category,attr"` + Outlines []Outline `xml:"outline"` +} + +func ImportFeeds(format string, r io.Reader) error { + switch format { + case "opml": + return ImportOPML(r) + case "text": + return ImportText(r) + case "json": + return ImportJSONReader(r) + default: + return errors.New("unsupported import format") + } +} + +func ImportOPML(r io.Reader) error { + var o OPML + if err := xml.NewDecoder(r).Decode(&o); err != nil { return err } - defer f.Close() - dec := json.NewDecoder(f) + var walk func([]Outline, string) + walk = func(outlines []Outline, cat string) { + for _, out := range outlines { + if out.Type == "rss" || out.XMLURL != "" { + f := &feed.Feed{ + Url: out.XMLURL, + Title: out.Title, + WebUrl: out.HTMLURL, + Category: cat, + } + if f.Title == "" { + f.Title = out.Text + } + if f.Category == "" { + f.Category = out.Category + } + err := f.Create() + if err != nil { + log.Printf("error importing %s: %v", f.Url, err) + } else { + log.Printf("imported %s", f.Url) + } + } + if len(out.Outlines) > 0 { + newCat := cat + if out.XMLURL == "" && out.Text != "" { + newCat = out.Text + } + walk(out.Outlines, newCat) + } + } + } + walk(o.Body.Outlines, "") + return nil +} + +func ImportText(r io.Reader) error { + scanner := bufio.NewScanner(r) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + err := feed.NewFeed(line) + if err != nil { + log.Printf("error importing %s: %v", line, err) + } else { + log.Printf("imported %s", line) + } + } + return scanner.Err() +} + +func ImportJSONReader(r io.Reader) error { + dec := json.NewDecoder(r) for { var ii IItem if err := dec.Decode(&ii); err == io.EOF { @@ -57,6 +145,15 @@ func ImportJSON(filename string) error { return nil } +func ImportJSON(filename string) error { + f, err := os.Open(filename) + if err != nil { + return err + } + defer f.Close() + return ImportJSONReader(f) +} + func InsertIItem(ii *IItem) error { var f feed.Feed @@ -67,6 +164,7 @@ func InsertIItem(ii *IItem) error { if err != nil { f.Url = ii.Feed.Url f.Title = ii.Feed.Title + f.WebUrl = ii.Feed.WebUrl err = f.Create() if err != nil { return err @@ -84,6 +182,5 @@ func InsertIItem(ii *IItem) error { } err = i.Create() - log.Printf("inserted %s\n", i.Url) return err } diff --git a/web/dist/v2/assets/index-6v9VVvST.css b/web/dist/v2/assets/index-6v9VVvST.css new file mode 100644 index 0000000..34a7618 --- /dev/null +++ b/web/dist/v2/assets/index-6v9VVvST.css @@ -0,0 +1 @@ +body{font-family:Palatino,Palatino Linotype,Palatino LT STD,Book Antiqua,Georgia,serif}h1,h2,h3,h4,h5,.logo,.nav-link,.logout-btn{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700}:root{line-height:1.5;font-size:18px;--bg-color: #ffffff;--text-color: rgba(0, 0, 0, .87);--sidebar-bg: #ccc;--link-color: #0000ee;color-scheme:light dark;color:var(--text-color);background-color:var(--bg-color)}.theme-light{--bg-color: #ffffff;--text-color: rgba(0, 0, 0, .87);--sidebar-bg: #ccc;--link-color: #0000ee;--border-color: #999;background-color:var(--bg-color);color:var(--text-color)}@media(prefers-color-scheme:dark){:root{--bg-color: #24292e;--text-color: #ffffff;--sidebar-bg: #1b1f23;--link-color: rgb(90, 200, 250)}}.theme-dark{--bg-color: #000000;--text-color: #ffffff;--sidebar-bg: #111111;--link-color: rgb(90, 200, 250);--border-color: #333;background-color:var(--bg-color);color:var(--text-color)}.theme-dark button{background-color:#333;color:#fff}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:700;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}a{color:var(--link-color);text-decoration:none}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#00f;text-decoration:underline}button{background-color:#f9f9f9}}.login-container{display:flex;justify-content:center;align-items:center;height:100vh;background-color:#f5f5f5}.login-form{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 4px 6px #0000001a;width:100%;max-width:400px}.login-form h1{margin-bottom:2rem;text-align:center;color:#333}.form-group{margin-bottom:1.5rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:700;color:#555}.form-group input{width:100%;padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem}.error-message{color:#dc3545;margin-bottom:1rem;text-align:center}button[type=submit]{width:100%;padding:.75rem;background-color:#007bff;color:#fff;border:none;border-radius:4px;font-size:1rem;cursor:pointer;transition:background-color .2s}button[type=submit]:hover{background-color:#0056b3}*{box-sizing:border-box}body{margin:0}.dashboard{display:flex;flex-direction:column;height:100vh;overflow:hidden}.dashboard-header{background:#222;color:#fff;padding:.5rem 1rem;display:flex;justify-content:space-between;align-items:center;font-weight:700}.dashboard-header .logo{margin:0;font-size:2rem;cursor:pointer;line-height:1}.nav-link,.logout-btn{font-weight:700;font-variant:small-caps;text-transform:lowercase;font-size:1rem;background:transparent;border:none;color:#ccc;cursor:pointer;margin-left:1rem}.nav-link:hover,.logout-btn:hover{color:#fff;text-decoration:underline}.dashboard-content{display:flex;flex:1;overflow:hidden;position:relative}.dashboard-sidebar{width:15rem;background:var(--sidebar-bg);border-right:1px solid var(--border-color);display:flex;flex-direction:column;overflow-y:auto;padding:1rem;transition:margin-left .4s ease}.dashboard-sidebar.hidden{margin-left:-15rem}.dashboard-main{flex:1;padding:2rem;overflow-y:auto;background:var(--bg-color);margin-left:0}.dashboard-main>*{max-width:35em;margin:0 auto}.logout-btn{background:transparent;border:1px solid rgba(255,255,255,.3);color:#fff;padding:.5rem 1rem;border-radius:4px;cursor:pointer;transition:all .2s;font-size:.9rem}.logout-btn:hover{background:#ffffff1a;border-color:#ffffff80}.feed-list{padding:0;background:transparent}.search-section{margin-bottom:1.5rem}.search-form{display:flex}.search-input{width:100%;padding:.5rem;border:1px solid var(--border-color, #999);background:var(--bg-color);color:var(--text-color);font-size:1rem;font-family:inherit}.search-input:focus{outline:none;background:var(--bg-color);border-color:var(--link-color)}.feed-list h2,.feed-section-header{font-size:1.2rem;margin-bottom:.5rem;border-bottom:1px solid var(--border-color, #999);padding-bottom:.25rem;text-transform:uppercase;letter-spacing:1px;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.toggle-indicator{font-size:.8rem;margin-right:.5rem;display:inline-block;width:1rem;text-align:center}.feed-list-items,.tag-list-items,.filter-list{list-style:none;padding:0;margin:0}.sidebar-feed-item{padding:.25rem 0;border-bottom:none;display:flex;justify-content:space-between;align-items:center}.feed-title{color:var(--link-color);text-decoration:none;font-size:.9rem;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.feed-title:hover{text-decoration:underline;color:var(--link-color)}.feed-category{display:none}.tag-section{margin-top:2rem}.tag-link{color:var(--link-color);text-decoration:none;font-size:.9rem;display:block;padding:.1rem 0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.tag-link:hover{text-decoration:underline;background:transparent;color:var(--link-color)}.filter-section{margin-bottom:2rem}.filter-list{display:block;list-style:none;padding:0;margin:0}.filter-list li a{text-decoration:none;color:var(--text-color);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-variant:small-caps;text-transform:lowercase;font-size:1.1rem;display:block;margin-bottom:.5rem}.filter-list li a:hover{color:#00f;background-color:transparent;text-decoration:underline}.feed-title.active,.tag-link.active,.filter-list li a.active,.theme-selector button.active{font-weight:700!important}.theme-section{margin-top:2rem;padding-bottom:2rem}.theme-selector{display:flex;justify-content:space-between;gap:5px}.theme-selector button{font-size:1.2rem;padding:.5rem;width:48%;background:var(--sidebar-bg);border:1px solid var(--border-color, #ccc);border-radius:4px}.theme-selector button:hover{background:var(--bg-color)}.theme-selector button.active{background:var(--bg-color);border-color:var(--link-color);box-shadow:0 0 5px var(--link-color)}.feed-item{padding:1rem;margin-top:5rem;list-style:none;border-bottom:none}.item-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.5rem}.item-title{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.8rem;font-weight:700;text-decoration:none;color:var(--link-color);display:block;flex:1}.item-title:hover{text-decoration:none;color:var(--link-color)}.item-actions{display:flex;gap:.5rem;margin-left:1rem}.star-btn{background:none;border:none;cursor:pointer;font-size:1.25rem;padding:0 0 0 .5rem;vertical-align:middle;transition:color .2s;line-height:1}.star-btn.is-starred{color:#00f}.star-btn.is-unstarred{color:var(--text-color);opacity:.3}.star-btn:hover{color:#00f}.action-btn{background:var(--sidebar-bg);border:1px solid var(--border-color, #ccc);cursor:pointer;padding:2px 6px;font-size:1rem;color:#00f;font-weight:700}.action-btn:hover{background-color:#eee}.dateline{margin-top:0;font-weight:400;font-size:.75em;color:#ccc;margin-bottom:1rem}.dateline a{color:#ccc;text-decoration:none}.item-description{color:var(--text-color);line-height:1.5;font-size:1rem;margin-top:1rem}.item-description img{max-width:100%;height:auto;display:block;margin:1rem 0}.item-description blockquote{padding:1rem 1rem 0;border-left:4px solid var(--sidebar-bg);color:var(--text-color);opacity:.8;margin-left:0}.feed-items{padding:1rem 0}.feed-items h2{margin-top:0;border-bottom:2px solid var(--border-color);padding-bottom:.5rem}.item-list{list-style:none;padding:0}.loading-more{padding:2rem;text-align:center;color:#888;font-size:.9rem;min-height:50px}.settings-page{padding:2rem;max-width:800px;margin:0 auto}.add-feed-section{background:var(--sidebar-bg);padding:1.5rem;border-radius:8px;margin-bottom:2rem;border:1px solid var(--border-color)}.add-feed-form{display:flex;gap:1rem}.feed-input{flex:1;padding:.5rem;border:1px solid var(--border-color);background:var(--bg-color);color:var(--text-color);border-radius:4px;font-size:1rem}.error-message{color:#d32f2f;margin-top:1rem}.settings-feed-list{list-style:none;padding:0;border:1px solid var(--border-color);border-radius:8px}.settings-feed-item{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--border-color)}.settings-feed-item:last-child{border-bottom:none}.feed-info{display:flex;flex-direction:column}.feed-title{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:1.1rem}.feed-url{color:var(--text-color);opacity:.6;font-size:.9rem}.delete-btn{background:#ff5252;color:#fff;border:none;padding:.5rem 1rem;border-radius:4px;cursor:pointer}.delete-btn:hover{background:#ff1744}.delete-btn:disabled{background:#ffcdd2;cursor:not-allowed} diff --git a/web/dist/v2/assets/index-B49AI1I_.css b/web/dist/v2/assets/index-B49AI1I_.css deleted file mode 100644 index 89e41ce..0000000 --- a/web/dist/v2/assets/index-B49AI1I_.css +++ /dev/null @@ -1 +0,0 @@ -body{font-family:Palatino,Palatino Linotype,Palatino LT STD,Book Antiqua,Georgia,serif}h1,h2,h3,h4,h5,.logo,.nav-link,.logout-btn{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700}:root{line-height:1.5;font-size:18px;--bg-color: #ffffff;--text-color: rgba(0, 0, 0, .87);--sidebar-bg: #ccc;--link-color: #0000ee;color-scheme:light dark;color:var(--text-color);background-color:var(--bg-color)}@media(prefers-color-scheme:dark){:root{--bg-color: #24292e;--text-color: #ffffff;--sidebar-bg: #1b1f23;--link-color: rgb(90, 200, 250)}}.theme-dark{--bg-color: #24292e;--text-color: #ffffff;--sidebar-bg: #1b1f23;--link-color: rgb(90, 200, 250);background-color:var(--bg-color);color:var(--text-color)}.theme-black{--bg-color: #000000;--text-color: #ffffff;--sidebar-bg: #111111;--link-color: rgb(90, 200, 250);background-color:var(--bg-color);color:var(--text-color)}.theme-dark button,.theme-black button{background-color:#333;color:#fff}body{margin:0;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:700;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}a{color:var(--link-color);text-decoration:none}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#00f;text-decoration:underline}button{background-color:#f9f9f9}}.login-container{display:flex;justify-content:center;align-items:center;height:100vh;background-color:#f5f5f5}.login-form{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 4px 6px #0000001a;width:100%;max-width:400px}.login-form h1{margin-bottom:2rem;text-align:center;color:#333}.form-group{margin-bottom:1.5rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:700;color:#555}.form-group input{width:100%;padding:.75rem;border:1px solid #ddd;border-radius:4px;font-size:1rem}.error-message{color:#dc3545;margin-bottom:1rem;text-align:center}button[type=submit]{width:100%;padding:.75rem;background-color:#007bff;color:#fff;border:none;border-radius:4px;font-size:1rem;cursor:pointer;transition:background-color .2s}button[type=submit]:hover{background-color:#0056b3}*{box-sizing:border-box}body{margin:0}.dashboard{display:flex;flex-direction:column;height:100vh;overflow:hidden}.dashboard-header{background:#222;color:#fff;padding:.5rem 1rem;display:flex;justify-content:space-between;align-items:center;font-weight:700}.dashboard-header .logo{margin:0;font-size:2rem;cursor:pointer;line-height:1}.nav-link,.logout-btn{font-weight:700;font-variant:small-caps;text-transform:lowercase;font-size:1rem;background:transparent;border:none;color:#ccc;cursor:pointer;margin-left:1rem}.nav-link:hover,.logout-btn:hover{color:#fff;text-decoration:underline}.dashboard-content{display:flex;flex:1;overflow:hidden;position:relative}.dashboard-sidebar{width:15rem;background:var(--sidebar-bg);border-right:1px solid #999;display:flex;flex-direction:column;overflow-y:auto;padding:1rem;transition:margin-left .4s ease}.dashboard-sidebar.hidden{margin-left:-15rem}.dashboard-main{flex:1;padding:2rem;overflow-y:auto;background:var(--bg-color);margin-left:0}.dashboard-main>*{max-width:35em;margin:0 auto}.logout-btn{background:transparent;border:1px solid rgba(255,255,255,.3);color:#fff;padding:.5rem 1rem;border-radius:4px;cursor:pointer;transition:all .2s;font-size:.9rem}.logout-btn:hover{background:#ffffff1a;border-color:#ffffff80}.feed-list{padding:0;background:transparent}.search-section{margin-bottom:1.5rem}.search-form{display:flex}.search-input{width:100%;padding:.5rem;border:1px solid #999;background:#eee;font-size:1rem;font-family:inherit}.search-input:focus{outline:none;background:#fff;border-color:#000}.feed-list h2,.feed-section-header{font-size:1.2rem;margin-bottom:.5rem;border-bottom:1px solid #999;padding-bottom:.25rem;text-transform:uppercase;letter-spacing:1px;cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.toggle-indicator{font-size:.8rem;margin-right:.5rem;display:inline-block;width:1rem;text-align:center}.feed-list-items,.tag-list-items,.filter-list{list-style:none;padding:0;margin:0}.sidebar-feed-item{padding:.25rem 0;border-bottom:none;display:flex;justify-content:space-between;align-items:center}.feed-title{color:var(--link-color);text-decoration:none;font-size:.9rem;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.feed-title:hover{text-decoration:underline;color:var(--link-color)}.feed-category{display:none}.tag-section{margin-top:2rem}.tag-link{color:var(--link-color);text-decoration:none;font-size:.9rem;display:block;padding:.1rem 0;font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.tag-link:hover{text-decoration:underline;background:transparent;color:var(--link-color)}.filter-section{margin-bottom:2rem}.filter-list{display:block;list-style:none;padding:0;margin:0}.filter-list li a{text-decoration:none;color:var(--text-color);font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-variant:small-caps;text-transform:lowercase;font-size:1.1rem;display:block;margin-bottom:.5rem}.filter-list li a:hover{color:#00f;background-color:transparent;text-decoration:underline}.feed-title.active,.tag-link.active,.filter-list li a.active,.theme-selector button.active{font-weight:700!important}.theme-section{margin-top:2rem;padding-bottom:2rem}.theme-selector{display:flex;justify-content:space-between;gap:5px}.theme-selector button{font-size:.8rem;padding:.2rem .5rem;width:30%;background:#f5f5f5;color:#00f;border:1px solid #ccc;border-radius:4px;font-variant:small-caps;text-transform:lowercase}.theme-selector button:hover{background:#eee}.theme-selector button.active{color:#000;border-color:#000}.feed-item{padding:1rem;margin-top:5rem;list-style:none;border-bottom:none}.item-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.5rem}.item-title{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.8rem;font-weight:700;text-decoration:none;color:var(--link-color);display:block;flex:1}.item-title:hover{text-decoration:none;color:var(--link-color)}.item-actions{display:flex;gap:.5rem;margin-left:1rem}.star-btn{background:none;border:none;cursor:pointer;font-size:1.25rem;padding:0 0 0 .5rem;vertical-align:middle;transition:color .2s;line-height:1}.star-btn.is-starred{color:#00f}.star-btn.is-unstarred{color:#000}.star-btn:hover{color:#00f}.action-btn{background:#f5f5f5;border:none;cursor:pointer;padding:2px 6px;font-size:1rem;color:#00f;font-weight:700}.action-btn:hover{background-color:#eee}.dateline{margin-top:0;font-weight:400;font-size:.75em;color:#ccc;margin-bottom:1rem}.dateline a{color:#ccc;text-decoration:none}.item-description{color:var(--text-color);line-height:1.5;font-size:1rem;margin-top:1rem}.item-description img{max-width:100%;height:auto;display:block;margin:1rem 0}.item-description blockquote{padding:1rem 1rem 0;border-left:4px solid #ddd;color:#666;margin-left:0}.feed-items{padding:1rem 0}.feed-items h2{margin-top:0;border-bottom:2px solid #eee;padding-bottom:.5rem}.item-list{list-style:none;padding:0}.loading-more{padding:2rem;text-align:center;color:#888;font-size:.9rem;min-height:50px}.settings-page{padding:2rem;max-width:800px;margin:0 auto}.add-feed-section{background:#f9f9f9;padding:1.5rem;border-radius:8px;margin-bottom:2rem;border:1px solid #eee}.add-feed-form{display:flex;gap:1rem}.feed-input{flex:1;padding:.5rem;border:1px solid #ccc;border-radius:4px;font-size:1rem}.error-message{color:#d32f2f;margin-top:1rem}.settings-feed-list{list-style:none;padding:0;border:1px solid #eee;border-radius:8px}.settings-feed-item{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid #eee}.settings-feed-item:last-child{border-bottom:none}.feed-info{display:flex;flex-direction:column}.feed-title{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:1.1rem}.feed-url{color:#666;font-size:.9rem}.delete-btn{background:#ff5252;color:#fff;border:none;padding:.5rem 1rem;border-radius:4px;cursor:pointer}.delete-btn:hover{background:#ff1744}.delete-btn:disabled{background:#ffcdd2;cursor:not-allowed} diff --git a/web/dist/v2/assets/index-Gb6N44HC.js b/web/dist/v2/assets/index-Gb6N44HC.js deleted file mode 100644 index 3f0fd50..0000000 --- a/web/dist/v2/assets/index-Gb6N44HC.js +++ /dev/null @@ -1,11 +0,0 @@ -(function(){const s=document.createElement("link").relList;if(s&&s.supports&&s.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))f(d);new MutationObserver(d=>{for(const m of d)if(m.type==="childList")for(const S of m.addedNodes)S.tagName==="LINK"&&S.rel==="modulepreload"&&f(S)}).observe(document,{childList:!0,subtree:!0});function o(d){const m={};return d.integrity&&(m.integrity=d.integrity),d.referrerPolicy&&(m.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?m.credentials="include":d.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function f(d){if(d.ep)return;d.ep=!0;const m=o(d);fetch(d.href,m)}})();var Mf={exports:{}},Cu={};var Fd;function lv(){if(Fd)return Cu;Fd=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function o(f,d,m){var S=null;if(m!==void 0&&(S=""+m),d.key!==void 0&&(S=""+d.key),"key"in d){m={};for(var R in d)R!=="key"&&(m[R]=d[R])}else m=d;return d=m.ref,{$$typeof:c,type:f,key:S,ref:d!==void 0?d:null,props:m}}return Cu.Fragment=s,Cu.jsx=o,Cu.jsxs=o,Cu}var Id;function av(){return Id||(Id=1,Mf.exports=lv()),Mf.exports}var j=av(),Df={exports:{}},et={};var Pd;function uv(){if(Pd)return et;Pd=1;var c=Symbol.for("react.transitional.element"),s=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),f=Symbol.for("react.strict_mode"),d=Symbol.for("react.profiler"),m=Symbol.for("react.consumer"),S=Symbol.for("react.context"),R=Symbol.for("react.forward_ref"),b=Symbol.for("react.suspense"),y=Symbol.for("react.memo"),N=Symbol.for("react.lazy"),z=Symbol.for("react.activity"),H=Symbol.iterator;function Q(g){return g===null||typeof g!="object"?null:(g=H&&g[H]||g["@@iterator"],typeof g=="function"?g:null)}var F={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},X=Object.assign,Z={};function J(g,x,L){this.props=g,this.context=x,this.refs=Z,this.updater=L||F}J.prototype.isReactComponent={},J.prototype.setState=function(g,x){if(typeof g!="object"&&typeof g!="function"&&g!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,g,x,"setState")},J.prototype.forceUpdate=function(g){this.updater.enqueueForceUpdate(this,g,"forceUpdate")};function G(){}G.prototype=J.prototype;function W(g,x,L){this.props=g,this.context=x,this.refs=Z,this.updater=L||F}var $=W.prototype=new G;$.constructor=W,X($,J.prototype),$.isPureReactComponent=!0;var P=Array.isArray;function B(){}var Y={H:null,A:null,T:null,S:null},st=Object.prototype.hasOwnProperty;function vt(g,x,L){var K=L.ref;return{$$typeof:c,type:g,key:x,ref:K!==void 0?K:null,props:L}}function Wt(g,x){return vt(g.type,x,g.props)}function Ce(g){return typeof g=="object"&&g!==null&&g.$$typeof===c}function kt(g){var x={"=":"=0",":":"=2"};return"$"+g.replace(/[=:]/g,function(L){return x[L]})}var Dl=/\/+/g;function qe(g,x){return typeof g=="object"&&g!==null&&g.key!=null?kt(""+g.key):x.toString(36)}function Re(g){switch(g.status){case"fulfilled":return g.value;case"rejected":throw g.reason;default:switch(typeof g.status=="string"?g.then(B,B):(g.status="pending",g.then(function(x){g.status==="pending"&&(g.status="fulfilled",g.value=x)},function(x){g.status==="pending"&&(g.status="rejected",g.reason=x)})),g.status){case"fulfilled":return g.value;case"rejected":throw g.reason}}throw g}function D(g,x,L,K,lt){var nt=typeof g;(nt==="undefined"||nt==="boolean")&&(g=null);var yt=!1;if(g===null)yt=!0;else switch(nt){case"bigint":case"string":case"number":yt=!0;break;case"object":switch(g.$$typeof){case c:case s:yt=!0;break;case N:return yt=g._init,D(yt(g._payload),x,L,K,lt)}}if(yt)return lt=lt(g),yt=K===""?"."+qe(g,0):K,P(lt)?(L="",yt!=null&&(L=yt.replace(Dl,"$&/")+"/"),D(lt,x,L,"",function(Ya){return Ya})):lt!=null&&(Ce(lt)&&(lt=Wt(lt,L+(lt.key==null||g&&g.key===lt.key?"":(""+lt.key).replace(Dl,"$&/")+"/")+yt)),x.push(lt)),1;yt=0;var Jt=K===""?".":K+":";if(P(g))for(var Ut=0;Ut>>1,zt=D[St];if(0>>1;Std(L,tt))Kd(lt,L)?(D[St]=lt,D[K]=tt,St=K):(D[St]=L,D[x]=tt,St=x);else if(Kd(lt,tt))D[St]=lt,D[K]=tt,St=K;else break t}}return q}function d(D,q){var tt=D.sortIndex-q.sortIndex;return tt!==0?tt:D.id-q.id}if(c.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var m=performance;c.unstable_now=function(){return m.now()}}else{var S=Date,R=S.now();c.unstable_now=function(){return S.now()-R}}var b=[],y=[],N=1,z=null,H=3,Q=!1,F=!1,X=!1,Z=!1,J=typeof setTimeout=="function"?setTimeout:null,G=typeof clearTimeout=="function"?clearTimeout:null,W=typeof setImmediate<"u"?setImmediate:null;function $(D){for(var q=o(y);q!==null;){if(q.callback===null)f(y);else if(q.startTime<=D)f(y),q.sortIndex=q.expirationTime,s(b,q);else break;q=o(y)}}function P(D){if(X=!1,$(D),!F)if(o(b)!==null)F=!0,B||(B=!0,kt());else{var q=o(y);q!==null&&Re(P,q.startTime-D)}}var B=!1,Y=-1,st=5,vt=-1;function Wt(){return Z?!0:!(c.unstable_now()-vtD&&Wt());){var St=z.callback;if(typeof St=="function"){z.callback=null,H=z.priorityLevel;var zt=St(z.expirationTime<=D);if(D=c.unstable_now(),typeof zt=="function"){z.callback=zt,$(D),q=!0;break e}z===o(b)&&f(b),$(D)}else f(b);z=o(b)}if(z!==null)q=!0;else{var g=o(y);g!==null&&Re(P,g.startTime-D),q=!1}}break t}finally{z=null,H=tt,Q=!1}q=void 0}}finally{q?kt():B=!1}}}var kt;if(typeof W=="function")kt=function(){W(Ce)};else if(typeof MessageChannel<"u"){var Dl=new MessageChannel,qe=Dl.port2;Dl.port1.onmessage=Ce,kt=function(){qe.postMessage(null)}}else kt=function(){J(Ce,0)};function Re(D,q){Y=J(function(){D(c.unstable_now())},q)}c.unstable_IdlePriority=5,c.unstable_ImmediatePriority=1,c.unstable_LowPriority=4,c.unstable_NormalPriority=3,c.unstable_Profiling=null,c.unstable_UserBlockingPriority=2,c.unstable_cancelCallback=function(D){D.callback=null},c.unstable_forceFrameRate=function(D){0>D||125St?(D.sortIndex=tt,s(y,D),o(b)===null&&D===o(y)&&(X?(G(Y),Y=-1):X=!0,Re(P,tt-St))):(D.sortIndex=zt,s(b,D),F||Q||(F=!0,B||(B=!0,kt()))),D},c.unstable_shouldYield=Wt,c.unstable_wrapCallback=function(D){var q=H;return function(){var tt=H;H=q;try{return D.apply(this,arguments)}finally{H=tt}}}})(Cf)),Cf}var lh;function iv(){return lh||(lh=1,Uf.exports=nv()),Uf.exports}var xf={exports:{}},wt={};var ah;function cv(){if(ah)return wt;ah=1;var c=Xf();function s(b){var y="https://react.dev/errors/"+b;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(s){console.error(s)}}return c(),xf.exports=cv(),xf.exports}var nh;function rv(){if(nh)return xu;nh=1;var c=iv(),s=Xf(),o=fv();function f(t){var e="https://react.dev/errors/"+t;if(1zt||(t.current=St[zt],St[zt]=null,zt--)}function L(t,e){zt++,St[zt]=t.current,t.current=e}var K=g(null),lt=g(null),nt=g(null),yt=g(null);function Jt(t,e){switch(L(nt,e),L(lt,t),L(K,null),e.nodeType){case 9:case 11:t=(t=e.documentElement)&&(t=t.namespaceURI)?bd(t):0;break;default:if(t=e.tagName,e=e.namespaceURI)e=bd(e),t=Ed(e,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}x(K),L(K,t)}function Ut(){x(K),x(lt),x(nt)}function Ya(t){t.memoizedState!==null&&L(yt,t);var e=K.current,l=Ed(e,t.type);e!==l&&(L(lt,t),L(K,l))}function Lu(t){lt.current===t&&(x(K),x(lt)),yt.current===t&&(x(yt),Mu._currentValue=tt)}var ri,Wf;function Nl(t){if(ri===void 0)try{throw Error()}catch(l){var e=l.stack.trim().match(/\n( *(at )?)/);ri=e&&e[1]||"",Wf=-1)":-1u||h[a]!==T[u]){var M=` -`+h[a].replace(" at new "," at ");return t.displayName&&M.includes("")&&(M=M.replace("",t.displayName)),M}while(1<=a&&0<=u);break}}}finally{si=!1,Error.prepareStackTrace=l}return(l=t?t.displayName||t.name:"")?Nl(l):""}function xh(t,e){switch(t.tag){case 26:case 27:case 5:return Nl(t.type);case 16:return Nl("Lazy");case 13:return t.child!==e&&e!==null?Nl("Suspense Fallback"):Nl("Suspense");case 19:return Nl("SuspenseList");case 0:case 15:return oi(t.type,!1);case 11:return oi(t.type.render,!1);case 1:return oi(t.type,!0);case 31:return Nl("Activity");default:return""}}function kf(t){try{var e="",l=null;do e+=xh(t,l),l=t,t=t.return;while(t);return e}catch(a){return` -Error generating stack: `+a.message+` -`+a.stack}}var di=Object.prototype.hasOwnProperty,hi=c.unstable_scheduleCallback,mi=c.unstable_cancelCallback,jh=c.unstable_shouldYield,Hh=c.unstable_requestPaint,ue=c.unstable_now,Bh=c.unstable_getCurrentPriorityLevel,Ff=c.unstable_ImmediatePriority,If=c.unstable_UserBlockingPriority,Yu=c.unstable_NormalPriority,qh=c.unstable_LowPriority,Pf=c.unstable_IdlePriority,Lh=c.log,Yh=c.unstable_setDisableYieldValue,Ga=null,ne=null;function ul(t){if(typeof Lh=="function"&&Yh(t),ne&&typeof ne.setStrictMode=="function")try{ne.setStrictMode(Ga,t)}catch{}}var ie=Math.clz32?Math.clz32:Qh,Gh=Math.log,Xh=Math.LN2;function Qh(t){return t>>>=0,t===0?32:31-(Gh(t)/Xh|0)|0}var Gu=256,Xu=262144,Qu=4194304;function Ul(t){var e=t&42;if(e!==0)return e;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return t&261888;case 262144:case 524288:case 1048576:case 2097152:return t&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function Zu(t,e,l){var a=t.pendingLanes;if(a===0)return 0;var u=0,n=t.suspendedLanes,i=t.pingedLanes;t=t.warmLanes;var r=a&134217727;return r!==0?(a=r&~n,a!==0?u=Ul(a):(i&=r,i!==0?u=Ul(i):l||(l=r&~t,l!==0&&(u=Ul(l))))):(r=a&~n,r!==0?u=Ul(r):i!==0?u=Ul(i):l||(l=a&~t,l!==0&&(u=Ul(l)))),u===0?0:e!==0&&e!==u&&(e&n)===0&&(n=u&-u,l=e&-e,n>=l||n===32&&(l&4194048)!==0)?e:u}function Xa(t,e){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&e)===0}function Zh(t,e){switch(t){case 1:case 2:case 4:case 8:case 64:return e+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function tr(){var t=Qu;return Qu<<=1,(Qu&62914560)===0&&(Qu=4194304),t}function yi(t){for(var e=[],l=0;31>l;l++)e.push(t);return e}function Qa(t,e){t.pendingLanes|=e,e!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function Vh(t,e,l,a,u,n){var i=t.pendingLanes;t.pendingLanes=l,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=l,t.entangledLanes&=l,t.errorRecoveryDisabledLanes&=l,t.shellSuspendCounter=0;var r=t.entanglements,h=t.expirationTimes,T=t.hiddenUpdates;for(l=i&~l;0"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var kh=/[\n"\\]/g;function ve(t){return t.replace(kh,function(e){return"\\"+e.charCodeAt(0).toString(16)+" "})}function Ei(t,e,l,a,u,n,i,r){t.name="",i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"?t.type=i:t.removeAttribute("type"),e!=null?i==="number"?(e===0&&t.value===""||t.value!=e)&&(t.value=""+ye(e)):t.value!==""+ye(e)&&(t.value=""+ye(e)):i!=="submit"&&i!=="reset"||t.removeAttribute("value"),e!=null?Ti(t,i,ye(e)):l!=null?Ti(t,i,ye(l)):a!=null&&t.removeAttribute("value"),u==null&&n!=null&&(t.defaultChecked=!!n),u!=null&&(t.checked=u&&typeof u!="function"&&typeof u!="symbol"),r!=null&&typeof r!="function"&&typeof r!="symbol"&&typeof r!="boolean"?t.name=""+ye(r):t.removeAttribute("name")}function hr(t,e,l,a,u,n,i,r){if(n!=null&&typeof n!="function"&&typeof n!="symbol"&&typeof n!="boolean"&&(t.type=n),e!=null||l!=null){if(!(n!=="submit"&&n!=="reset"||e!=null)){bi(t);return}l=l!=null?""+ye(l):"",e=e!=null?""+ye(e):l,r||e===t.value||(t.value=e),t.defaultValue=e}a=a??u,a=typeof a!="function"&&typeof a!="symbol"&&!!a,t.checked=r?t.checked:!!a,t.defaultChecked=!!a,i!=null&&typeof i!="function"&&typeof i!="symbol"&&typeof i!="boolean"&&(t.name=i),bi(t)}function Ti(t,e,l){e==="number"&&wu(t.ownerDocument)===t||t.defaultValue===""+l||(t.defaultValue=""+l)}function la(t,e,l,a){if(t=t.options,e){e={};for(var u=0;u"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Oi=!1;if(Ge)try{var wa={};Object.defineProperty(wa,"passive",{get:function(){Oi=!0}}),window.addEventListener("test",wa,wa),window.removeEventListener("test",wa,wa)}catch{Oi=!1}var il=null,Mi=null,$u=null;function br(){if($u)return $u;var t,e=Mi,l=e.length,a,u="value"in il?il.value:il.textContent,n=u.length;for(t=0;t=Wa),Rr=" ",Or=!1;function Mr(t,e){switch(t){case"keyup":return Am.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Dr(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ia=!1;function Rm(t,e){switch(t){case"compositionend":return Dr(e);case"keypress":return e.which!==32?null:(Or=!0,Rr);case"textInput":return t=e.data,t===Rr&&Or?null:t;default:return null}}function Om(t,e){if(ia)return t==="compositionend"||!xi&&Mr(t,e)?(t=br(),$u=Mi=il=null,ia=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1=e)return{node:l,offset:e-t};t=a}t:{for(;l;){if(l.nextSibling){l=l.nextSibling;break t}l=l.parentNode}l=void 0}l=qr(l)}}function Yr(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Yr(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function Gr(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var e=wu(t.document);e instanceof t.HTMLIFrameElement;){try{var l=typeof e.contentWindow.location.href=="string"}catch{l=!1}if(l)t=e.contentWindow;else break;e=wu(t.document)}return e}function Bi(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}var Hm=Ge&&"documentMode"in document&&11>=document.documentMode,ca=null,qi=null,Pa=null,Li=!1;function Xr(t,e,l){var a=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Li||ca==null||ca!==wu(a)||(a=ca,"selectionStart"in a&&Bi(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Pa&&Ia(Pa,a)||(Pa=a,a=Qn(qi,"onSelect"),0>=i,u-=i,xe=1<<32-ie(e)+u|l<ut?(rt=w,w=null):rt=w.sibling;var ht=_(p,w,E[ut],U);if(ht===null){w===null&&(w=rt);break}t&&w&&ht.alternate===null&&e(p,w),v=n(ht,v,ut),dt===null?k=ht:dt.sibling=ht,dt=ht,w=rt}if(ut===E.length)return l(p,w),ot&&Qe(p,ut),k;if(w===null){for(;utut?(rt=w,w=null):rt=w.sibling;var Ml=_(p,w,ht.value,U);if(Ml===null){w===null&&(w=rt);break}t&&w&&Ml.alternate===null&&e(p,w),v=n(Ml,v,ut),dt===null?k=Ml:dt.sibling=Ml,dt=Ml,w=rt}if(ht.done)return l(p,w),ot&&Qe(p,ut),k;if(w===null){for(;!ht.done;ut++,ht=E.next())ht=C(p,ht.value,U),ht!==null&&(v=n(ht,v,ut),dt===null?k=ht:dt.sibling=ht,dt=ht);return ot&&Qe(p,ut),k}for(w=a(w);!ht.done;ut++,ht=E.next())ht=O(w,p,ut,ht.value,U),ht!==null&&(t&&ht.alternate!==null&&w.delete(ht.key===null?ut:ht.key),v=n(ht,v,ut),dt===null?k=ht:dt.sibling=ht,dt=ht);return t&&w.forEach(function(ev){return e(p,ev)}),ot&&Qe(p,ut),k}function Tt(p,v,E,U){if(typeof E=="object"&&E!==null&&E.type===X&&E.key===null&&(E=E.props.children),typeof E=="object"&&E!==null){switch(E.$$typeof){case Q:t:{for(var k=E.key;v!==null;){if(v.key===k){if(k=E.type,k===X){if(v.tag===7){l(p,v.sibling),U=u(v,E.props.children),U.return=p,p=U;break t}}else if(v.elementType===k||typeof k=="object"&&k!==null&&k.$$typeof===st&&Ql(k)===v.type){l(p,v.sibling),U=u(v,E.props),nu(U,E),U.return=p,p=U;break t}l(p,v);break}else e(p,v);v=v.sibling}E.type===X?(U=ql(E.props.children,p.mode,U,E.key),U.return=p,p=U):(U=un(E.type,E.key,E.props,null,p.mode,U),nu(U,E),U.return=p,p=U)}return i(p);case F:t:{for(k=E.key;v!==null;){if(v.key===k)if(v.tag===4&&v.stateNode.containerInfo===E.containerInfo&&v.stateNode.implementation===E.implementation){l(p,v.sibling),U=u(v,E.children||[]),U.return=p,p=U;break t}else{l(p,v);break}else e(p,v);v=v.sibling}U=Ki(E,p.mode,U),U.return=p,p=U}return i(p);case st:return E=Ql(E),Tt(p,v,E,U)}if(Re(E))return V(p,v,E,U);if(kt(E)){if(k=kt(E),typeof k!="function")throw Error(f(150));return E=k.call(E),I(p,v,E,U)}if(typeof E.then=="function")return Tt(p,v,dn(E),U);if(E.$$typeof===W)return Tt(p,v,fn(p,E),U);hn(p,E)}return typeof E=="string"&&E!==""||typeof E=="number"||typeof E=="bigint"?(E=""+E,v!==null&&v.tag===6?(l(p,v.sibling),U=u(v,E),U.return=p,p=U):(l(p,v),U=Vi(E,p.mode,U),U.return=p,p=U),i(p)):l(p,v)}return function(p,v,E,U){try{uu=0;var k=Tt(p,v,E,U);return pa=null,k}catch(w){if(w===ga||w===sn)throw w;var dt=fe(29,w,null,p.mode);return dt.lanes=U,dt.return=p,dt}}}var Vl=ss(!0),os=ss(!1),ol=!1;function ac(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function uc(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,callbacks:null})}function dl(t){return{lane:t,tag:0,payload:null,callback:null,next:null}}function hl(t,e,l){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(mt&2)!==0){var u=a.pending;return u===null?e.next=e:(e.next=u.next,u.next=e),a.pending=e,e=an(t),$r(t,null,l),e}return ln(t,a,e,l),an(t)}function iu(t,e,l){if(e=e.updateQueue,e!==null&&(e=e.shared,(l&4194048)!==0)){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,lr(t,l)}}function nc(t,e){var l=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,l===a)){var u=null,n=null;if(l=l.firstBaseUpdate,l!==null){do{var i={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};n===null?u=n=i:n=n.next=i,l=l.next}while(l!==null);n===null?u=n=e:n=n.next=e}else u=n=e;l={baseState:a.baseState,firstBaseUpdate:u,lastBaseUpdate:n,shared:a.shared,callbacks:a.callbacks},t.updateQueue=l;return}t=l.lastBaseUpdate,t===null?l.firstBaseUpdate=e:t.next=e,l.lastBaseUpdate=e}var ic=!1;function cu(){if(ic){var t=va;if(t!==null)throw t}}function fu(t,e,l,a){ic=!1;var u=t.updateQueue;ol=!1;var n=u.firstBaseUpdate,i=u.lastBaseUpdate,r=u.shared.pending;if(r!==null){u.shared.pending=null;var h=r,T=h.next;h.next=null,i===null?n=T:i.next=T,i=h;var M=t.alternate;M!==null&&(M=M.updateQueue,r=M.lastBaseUpdate,r!==i&&(r===null?M.firstBaseUpdate=T:r.next=T,M.lastBaseUpdate=h))}if(n!==null){var C=u.baseState;i=0,M=T=h=null,r=n;do{var _=r.lane&-536870913,O=_!==r.lane;if(O?(ft&_)===_:(a&_)===_){_!==0&&_===ya&&(ic=!0),M!==null&&(M=M.next={lane:0,tag:r.tag,payload:r.payload,callback:null,next:null});t:{var V=t,I=r;_=e;var Tt=l;switch(I.tag){case 1:if(V=I.payload,typeof V=="function"){C=V.call(Tt,C,_);break t}C=V;break t;case 3:V.flags=V.flags&-65537|128;case 0:if(V=I.payload,_=typeof V=="function"?V.call(Tt,C,_):V,_==null)break t;C=z({},C,_);break t;case 2:ol=!0}}_=r.callback,_!==null&&(t.flags|=64,O&&(t.flags|=8192),O=u.callbacks,O===null?u.callbacks=[_]:O.push(_))}else O={lane:_,tag:r.tag,payload:r.payload,callback:r.callback,next:null},M===null?(T=M=O,h=C):M=M.next=O,i|=_;if(r=r.next,r===null){if(r=u.shared.pending,r===null)break;O=r,r=O.next,O.next=null,u.lastBaseUpdate=O,u.shared.pending=null}}while(!0);M===null&&(h=C),u.baseState=h,u.firstBaseUpdate=T,u.lastBaseUpdate=M,n===null&&(u.shared.lanes=0),pl|=i,t.lanes=i,t.memoizedState=C}}function ds(t,e){if(typeof t!="function")throw Error(f(191,t));t.call(e)}function hs(t,e){var l=t.callbacks;if(l!==null)for(t.callbacks=null,t=0;tn?n:8;var i=D.T,r={};D.T=r,_c(t,!1,e,l);try{var h=u(),T=D.S;if(T!==null&&T(r,h),h!==null&&typeof h=="object"&&typeof h.then=="function"){var M=Vm(h,a);ou(t,e,M,he(t))}else ou(t,e,a,he(t))}catch(C){ou(t,e,{then:function(){},status:"rejected",reason:C},he())}finally{q.p=n,i!==null&&r.types!==null&&(i.types=r.types),D.T=i}}function km(){}function zc(t,e,l,a){if(t.tag!==5)throw Error(f(476));var u=Ks(t).queue;Vs(t,u,e,tt,l===null?km:function(){return ws(t),l(a)})}function Ks(t){var e=t.memoizedState;if(e!==null)return e;e={memoizedState:tt,baseState:tt,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:we,lastRenderedState:tt},next:null};var l={};return e.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:we,lastRenderedState:l},next:null},t.memoizedState=e,t=t.alternate,t!==null&&(t.memoizedState=e),e}function ws(t){var e=Ks(t);e.next===null&&(e=t.alternate.memoizedState),ou(t,e.next.queue,{},he())}function Ac(){return Zt(Mu)}function Js(){return xt().memoizedState}function $s(){return xt().memoizedState}function Fm(t){for(var e=t.return;e!==null;){switch(e.tag){case 24:case 3:var l=he();t=dl(l);var a=hl(e,t,l);a!==null&&(ae(a,e,l),iu(a,e,l)),e={cache:Pi()},t.payload=e;return}e=e.return}}function Im(t,e,l){var a=he();l={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},zn(t)?ks(e,l):(l=Qi(t,e,l,a),l!==null&&(ae(l,t,a),Fs(l,e,a)))}function Ws(t,e,l){var a=he();ou(t,e,l,a)}function ou(t,e,l,a){var u={lane:a,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(zn(t))ks(e,u);else{var n=t.alternate;if(t.lanes===0&&(n===null||n.lanes===0)&&(n=e.lastRenderedReducer,n!==null))try{var i=e.lastRenderedState,r=n(i,l);if(u.hasEagerState=!0,u.eagerState=r,ce(r,i))return ln(t,e,u,0),At===null&&en(),!1}catch{}if(l=Qi(t,e,u,a),l!==null)return ae(l,t,a),Fs(l,e,a),!0}return!1}function _c(t,e,l,a){if(a={lane:2,revertLane:af(),gesture:null,action:a,hasEagerState:!1,eagerState:null,next:null},zn(t)){if(e)throw Error(f(479))}else e=Qi(t,l,a,2),e!==null&&ae(e,t,2)}function zn(t){var e=t.alternate;return t===at||e!==null&&e===at}function ks(t,e){ba=vn=!0;var l=t.pending;l===null?e.next=e:(e.next=l.next,l.next=e),t.pending=e}function Fs(t,e,l){if((l&4194048)!==0){var a=e.lanes;a&=t.pendingLanes,l|=a,e.lanes=l,lr(t,l)}}var du={readContext:Zt,use:Sn,useCallback:Dt,useContext:Dt,useEffect:Dt,useImperativeHandle:Dt,useLayoutEffect:Dt,useInsertionEffect:Dt,useMemo:Dt,useReducer:Dt,useRef:Dt,useState:Dt,useDebugValue:Dt,useDeferredValue:Dt,useTransition:Dt,useSyncExternalStore:Dt,useId:Dt,useHostTransitionStatus:Dt,useFormState:Dt,useActionState:Dt,useOptimistic:Dt,useMemoCache:Dt,useCacheRefresh:Dt};du.useEffectEvent=Dt;var Is={readContext:Zt,use:Sn,useCallback:function(t,e){return $t().memoizedState=[t,e===void 0?null:e],t},useContext:Zt,useEffect:Hs,useImperativeHandle:function(t,e,l){l=l!=null?l.concat([t]):null,En(4194308,4,Ys.bind(null,e,t),l)},useLayoutEffect:function(t,e){return En(4194308,4,t,e)},useInsertionEffect:function(t,e){En(4,2,t,e)},useMemo:function(t,e){var l=$t();e=e===void 0?null:e;var a=t();if(Kl){ul(!0);try{t()}finally{ul(!1)}}return l.memoizedState=[a,e],a},useReducer:function(t,e,l){var a=$t();if(l!==void 0){var u=l(e);if(Kl){ul(!0);try{l(e)}finally{ul(!1)}}}else u=e;return a.memoizedState=a.baseState=u,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:u},a.queue=t,t=t.dispatch=Im.bind(null,at,t),[a.memoizedState,t]},useRef:function(t){var e=$t();return t={current:t},e.memoizedState=t},useState:function(t){t=pc(t);var e=t.queue,l=Ws.bind(null,at,e);return e.dispatch=l,[t.memoizedState,l]},useDebugValue:Ec,useDeferredValue:function(t,e){var l=$t();return Tc(l,t,e)},useTransition:function(){var t=pc(!1);return t=Vs.bind(null,at,t.queue,!0,!1),$t().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,e,l){var a=at,u=$t();if(ot){if(l===void 0)throw Error(f(407));l=l()}else{if(l=e(),At===null)throw Error(f(349));(ft&127)!==0||Ss(a,e,l)}u.memoizedState=l;var n={value:l,getSnapshot:e};return u.queue=n,Hs(Es.bind(null,a,n,t),[t]),a.flags|=2048,Ta(9,{destroy:void 0},bs.bind(null,a,n,l,e),null),l},useId:function(){var t=$t(),e=At.identifierPrefix;if(ot){var l=je,a=xe;l=(a&~(1<<32-ie(a)-1)).toString(32)+l,e="_"+e+"R_"+l,l=gn++,0<\/script>",n=n.removeChild(n.firstChild);break;case"select":n=typeof a.is=="string"?i.createElement("select",{is:a.is}):i.createElement("select"),a.multiple?n.multiple=!0:a.size&&(n.size=a.size);break;default:n=typeof a.is=="string"?i.createElement(u,{is:a.is}):i.createElement(u)}}n[Xt]=e,n[Ft]=a;t:for(i=e.child;i!==null;){if(i.tag===5||i.tag===6)n.appendChild(i.stateNode);else if(i.tag!==4&&i.tag!==27&&i.child!==null){i.child.return=i,i=i.child;continue}if(i===e)break t;for(;i.sibling===null;){if(i.return===null||i.return===e)break t;i=i.return}i.sibling.return=i.return,i=i.sibling}e.stateNode=n;t:switch(Kt(n,u,a),u){case"button":case"input":case"select":case"textarea":a=!!a.autoFocus;break t;case"img":a=!0;break t;default:a=!1}a&&$e(e)}}return Rt(e),Yc(e,e.type,t===null?null:t.memoizedProps,e.pendingProps,l),null;case 6:if(t&&e.stateNode!=null)t.memoizedProps!==a&&$e(e);else{if(typeof a!="string"&&e.stateNode===null)throw Error(f(166));if(t=nt.current,ha(e)){if(t=e.stateNode,l=e.memoizedProps,a=null,u=Qt,u!==null)switch(u.tag){case 27:case 5:a=u.memoizedProps}t[Xt]=e,t=!!(t.nodeValue===l||a!==null&&a.suppressHydrationWarning===!0||pd(t.nodeValue,l)),t||rl(e,!0)}else t=Zn(t).createTextNode(a),t[Xt]=e,e.stateNode=t}return Rt(e),null;case 31:if(l=e.memoizedState,t===null||t.memoizedState!==null){if(a=ha(e),l!==null){if(t===null){if(!a)throw Error(f(318));if(t=e.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(f(557));t[Xt]=e}else Ll(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Rt(e),t=!1}else l=Wi(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=l),t=!0;if(!t)return e.flags&256?(se(e),e):(se(e),null);if((e.flags&128)!==0)throw Error(f(558))}return Rt(e),null;case 13:if(a=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(u=ha(e),a!==null&&a.dehydrated!==null){if(t===null){if(!u)throw Error(f(318));if(u=e.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(f(317));u[Xt]=e}else Ll(),(e.flags&128)===0&&(e.memoizedState=null),e.flags|=4;Rt(e),u=!1}else u=Wi(),t!==null&&t.memoizedState!==null&&(t.memoizedState.hydrationErrors=u),u=!0;if(!u)return e.flags&256?(se(e),e):(se(e),null)}return se(e),(e.flags&128)!==0?(e.lanes=l,e):(l=a!==null,t=t!==null&&t.memoizedState!==null,l&&(a=e.child,u=null,a.alternate!==null&&a.alternate.memoizedState!==null&&a.alternate.memoizedState.cachePool!==null&&(u=a.alternate.memoizedState.cachePool.pool),n=null,a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(n=a.memoizedState.cachePool.pool),n!==u&&(a.flags|=2048)),l!==t&&l&&(e.child.flags|=8192),Mn(e,e.updateQueue),Rt(e),null);case 4:return Ut(),t===null&&ff(e.stateNode.containerInfo),Rt(e),null;case 10:return Ve(e.type),Rt(e),null;case 19:if(x(Ct),a=e.memoizedState,a===null)return Rt(e),null;if(u=(e.flags&128)!==0,n=a.rendering,n===null)if(u)mu(a,!1);else{if(Nt!==0||t!==null&&(t.flags&128)!==0)for(t=e.child;t!==null;){if(n=yn(t),n!==null){for(e.flags|=128,mu(a,!1),t=n.updateQueue,e.updateQueue=t,Mn(e,t),e.subtreeFlags=0,t=l,l=e.child;l!==null;)Wr(l,t),l=l.sibling;return L(Ct,Ct.current&1|2),ot&&Qe(e,a.treeForkCount),e.child}t=t.sibling}a.tail!==null&&ue()>xn&&(e.flags|=128,u=!0,mu(a,!1),e.lanes=4194304)}else{if(!u)if(t=yn(n),t!==null){if(e.flags|=128,u=!0,t=t.updateQueue,e.updateQueue=t,Mn(e,t),mu(a,!0),a.tail===null&&a.tailMode==="hidden"&&!n.alternate&&!ot)return Rt(e),null}else 2*ue()-a.renderingStartTime>xn&&l!==536870912&&(e.flags|=128,u=!0,mu(a,!1),e.lanes=4194304);a.isBackwards?(n.sibling=e.child,e.child=n):(t=a.last,t!==null?t.sibling=n:e.child=n,a.last=n)}return a.tail!==null?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=ue(),t.sibling=null,l=Ct.current,L(Ct,u?l&1|2:l&1),ot&&Qe(e,a.treeForkCount),t):(Rt(e),null);case 22:case 23:return se(e),fc(),a=e.memoizedState!==null,t!==null?t.memoizedState!==null!==a&&(e.flags|=8192):a&&(e.flags|=8192),a?(l&536870912)!==0&&(e.flags&128)===0&&(Rt(e),e.subtreeFlags&6&&(e.flags|=8192)):Rt(e),l=e.updateQueue,l!==null&&Mn(e,l.retryQueue),l=null,t!==null&&t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(l=t.memoizedState.cachePool.pool),a=null,e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(a=e.memoizedState.cachePool.pool),a!==l&&(e.flags|=2048),t!==null&&x(Xl),null;case 24:return l=null,t!==null&&(l=t.memoizedState.cache),e.memoizedState.cache!==l&&(e.flags|=2048),Ve(jt),Rt(e),null;case 25:return null;case 30:return null}throw Error(f(156,e.tag))}function ay(t,e){switch(Ji(e),e.tag){case 1:return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return Ve(jt),Ut(),t=e.flags,(t&65536)!==0&&(t&128)===0?(e.flags=t&-65537|128,e):null;case 26:case 27:case 5:return Lu(e),null;case 31:if(e.memoizedState!==null){if(se(e),e.alternate===null)throw Error(f(340));Ll()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 13:if(se(e),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(f(340));Ll()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return x(Ct),null;case 4:return Ut(),null;case 10:return Ve(e.type),null;case 22:case 23:return se(e),fc(),t!==null&&x(Xl),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 24:return Ve(jt),null;case 25:return null;default:return null}}function zo(t,e){switch(Ji(e),e.tag){case 3:Ve(jt),Ut();break;case 26:case 27:case 5:Lu(e);break;case 4:Ut();break;case 31:e.memoizedState!==null&&se(e);break;case 13:se(e);break;case 19:x(Ct);break;case 10:Ve(e.type);break;case 22:case 23:se(e),fc(),t!==null&&x(Xl);break;case 24:Ve(jt)}}function yu(t,e){try{var l=e.updateQueue,a=l!==null?l.lastEffect:null;if(a!==null){var u=a.next;l=u;do{if((l.tag&t)===t){a=void 0;var n=l.create,i=l.inst;a=n(),i.destroy=a}l=l.next}while(l!==u)}}catch(r){pt(e,e.return,r)}}function vl(t,e,l){try{var a=e.updateQueue,u=a!==null?a.lastEffect:null;if(u!==null){var n=u.next;a=n;do{if((a.tag&t)===t){var i=a.inst,r=i.destroy;if(r!==void 0){i.destroy=void 0,u=e;var h=l,T=r;try{T()}catch(M){pt(u,h,M)}}}a=a.next}while(a!==n)}}catch(M){pt(e,e.return,M)}}function Ao(t){var e=t.updateQueue;if(e!==null){var l=t.stateNode;try{hs(e,l)}catch(a){pt(t,t.return,a)}}}function _o(t,e,l){l.props=wl(t.type,t.memoizedProps),l.state=t.memoizedState;try{l.componentWillUnmount()}catch(a){pt(t,e,a)}}function vu(t,e){try{var l=t.ref;if(l!==null){switch(t.tag){case 26:case 27:case 5:var a=t.stateNode;break;case 30:a=t.stateNode;break;default:a=t.stateNode}typeof l=="function"?t.refCleanup=l(a):l.current=a}}catch(u){pt(t,e,u)}}function He(t,e){var l=t.ref,a=t.refCleanup;if(l!==null)if(typeof a=="function")try{a()}catch(u){pt(t,e,u)}finally{t.refCleanup=null,t=t.alternate,t!=null&&(t.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(u){pt(t,e,u)}else l.current=null}function Ro(t){var e=t.type,l=t.memoizedProps,a=t.stateNode;try{t:switch(e){case"button":case"input":case"select":case"textarea":l.autoFocus&&a.focus();break t;case"img":l.src?a.src=l.src:l.srcSet&&(a.srcset=l.srcSet)}}catch(u){pt(t,t.return,u)}}function Gc(t,e,l){try{var a=t.stateNode;_y(a,t.type,l,e),a[Ft]=e}catch(u){pt(t,t.return,u)}}function Oo(t){return t.tag===5||t.tag===3||t.tag===26||t.tag===27&&zl(t.type)||t.tag===4}function Xc(t){t:for(;;){for(;t.sibling===null;){if(t.return===null||Oo(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.tag===27&&zl(t.type)||t.flags&2||t.child===null||t.tag===4)continue t;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function Qc(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(t,e):(e=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,e.appendChild(t),l=l._reactRootContainer,l!=null||e.onclick!==null||(e.onclick=Ye));else if(a!==4&&(a===27&&zl(t.type)&&(l=t.stateNode,e=null),t=t.child,t!==null))for(Qc(t,e,l),t=t.sibling;t!==null;)Qc(t,e,l),t=t.sibling}function Dn(t,e,l){var a=t.tag;if(a===5||a===6)t=t.stateNode,e?l.insertBefore(t,e):l.appendChild(t);else if(a!==4&&(a===27&&zl(t.type)&&(l=t.stateNode),t=t.child,t!==null))for(Dn(t,e,l),t=t.sibling;t!==null;)Dn(t,e,l),t=t.sibling}function Mo(t){var e=t.stateNode,l=t.memoizedProps;try{for(var a=t.type,u=e.attributes;u.length;)e.removeAttributeNode(u[0]);Kt(e,a,l),e[Xt]=t,e[Ft]=l}catch(n){pt(t,t.return,n)}}var We=!1,qt=!1,Zc=!1,Do=typeof WeakSet=="function"?WeakSet:Set,Gt=null;function uy(t,e){if(t=t.containerInfo,of=kn,t=Gr(t),Bi(t)){if("selectionStart"in t)var l={start:t.selectionStart,end:t.selectionEnd};else t:{l=(l=t.ownerDocument)&&l.defaultView||window;var a=l.getSelection&&l.getSelection();if(a&&a.rangeCount!==0){l=a.anchorNode;var u=a.anchorOffset,n=a.focusNode;a=a.focusOffset;try{l.nodeType,n.nodeType}catch{l=null;break t}var i=0,r=-1,h=-1,T=0,M=0,C=t,_=null;e:for(;;){for(var O;C!==l||u!==0&&C.nodeType!==3||(r=i+u),C!==n||a!==0&&C.nodeType!==3||(h=i+a),C.nodeType===3&&(i+=C.nodeValue.length),(O=C.firstChild)!==null;)_=C,C=O;for(;;){if(C===t)break e;if(_===l&&++T===u&&(r=i),_===n&&++M===a&&(h=i),(O=C.nextSibling)!==null)break;C=_,_=C.parentNode}C=O}l=r===-1||h===-1?null:{start:r,end:h}}else l=null}l=l||{start:0,end:0}}else l=null;for(df={focusedElem:t,selectionRange:l},kn=!1,Gt=e;Gt!==null;)if(e=Gt,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Gt=t;else for(;Gt!==null;){switch(e=Gt,n=e.alternate,t=e.flags,e.tag){case 0:if((t&4)!==0&&(t=e.updateQueue,t=t!==null?t.events:null,t!==null))for(l=0;l title"))),Kt(n,a,l),n[Xt]=t,Yt(n),a=n;break t;case"link":var i=Hd("link","href",u).get(a+(l.href||""));if(i){for(var r=0;rTt&&(i=Tt,Tt=I,I=i);var p=Lr(r,I),v=Lr(r,Tt);if(p&&v&&(O.rangeCount!==1||O.anchorNode!==p.node||O.anchorOffset!==p.offset||O.focusNode!==v.node||O.focusOffset!==v.offset)){var E=C.createRange();E.setStart(p.node,p.offset),O.removeAllRanges(),I>Tt?(O.addRange(E),O.extend(v.node,v.offset)):(E.setEnd(v.node,v.offset),O.addRange(E))}}}}for(C=[],O=r;O=O.parentNode;)O.nodeType===1&&C.push({element:O,left:O.scrollLeft,top:O.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;rl?32:l,D.T=null,l=kc,kc=null;var n=bl,i=tl;if(Lt=0,Oa=bl=null,tl=0,(mt&6)!==0)throw Error(f(331));var r=mt;if(mt|=4,Go(n.current),qo(n,n.current,i,l),mt=r,Tu(0,!1),ne&&typeof ne.onPostCommitFiberRoot=="function")try{ne.onPostCommitFiberRoot(Ga,n)}catch{}return!0}finally{q.p=u,D.T=a,ud(t,e)}}function id(t,e,l){e=pe(l,e),e=Dc(t.stateNode,e,2),t=hl(t,e,2),t!==null&&(Qa(t,2),Be(t))}function pt(t,e,l){if(t.tag===3)id(t,t,l);else for(;e!==null;){if(e.tag===3){id(e,t,l);break}else if(e.tag===1){var a=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof a.componentDidCatch=="function"&&(Sl===null||!Sl.has(a))){t=pe(l,t),l=io(2),a=hl(e,l,2),a!==null&&(co(l,a,e,t),Qa(a,2),Be(a));break}}e=e.return}}function tf(t,e,l){var a=t.pingCache;if(a===null){a=t.pingCache=new cy;var u=new Set;a.set(e,u)}else u=a.get(e),u===void 0&&(u=new Set,a.set(e,u));u.has(l)||(wc=!0,u.add(l),t=dy.bind(null,t,e,l),e.then(t,t))}function dy(t,e,l){var a=t.pingCache;a!==null&&a.delete(e),t.pingedLanes|=t.suspendedLanes&l,t.warmLanes&=~l,At===t&&(ft&l)===l&&(Nt===4||Nt===3&&(ft&62914560)===ft&&300>ue()-Cn?(mt&2)===0&&Ma(t,0):Jc|=l,Ra===ft&&(Ra=0)),Be(t)}function cd(t,e){e===0&&(e=tr()),t=Bl(t,e),t!==null&&(Qa(t,e),Be(t))}function hy(t){var e=t.memoizedState,l=0;e!==null&&(l=e.retryLane),cd(t,l)}function my(t,e){var l=0;switch(t.tag){case 31:case 13:var a=t.stateNode,u=t.memoizedState;u!==null&&(l=u.retryLane);break;case 19:a=t.stateNode;break;case 22:a=t.stateNode._retryCache;break;default:throw Error(f(314))}a!==null&&a.delete(e),cd(t,l)}function yy(t,e){return hi(t,e)}var Yn=null,Na=null,ef=!1,Gn=!1,lf=!1,Tl=0;function Be(t){t!==Na&&t.next===null&&(Na===null?Yn=Na=t:Na=Na.next=t),Gn=!0,ef||(ef=!0,gy())}function Tu(t,e){if(!lf&&Gn){lf=!0;do for(var l=!1,a=Yn;a!==null;){if(t!==0){var u=a.pendingLanes;if(u===0)var n=0;else{var i=a.suspendedLanes,r=a.pingedLanes;n=(1<<31-ie(42|t)+1)-1,n&=u&~(i&~r),n=n&201326741?n&201326741|1:n?n|2:0}n!==0&&(l=!0,od(a,n))}else n=ft,n=Zu(a,a===At?n:0,a.cancelPendingCommit!==null||a.timeoutHandle!==-1),(n&3)===0||Xa(a,n)||(l=!0,od(a,n));a=a.next}while(l);lf=!1}}function vy(){fd()}function fd(){Gn=ef=!1;var t=0;Tl!==0&&Oy()&&(t=Tl);for(var e=ue(),l=null,a=Yn;a!==null;){var u=a.next,n=rd(a,e);n===0?(a.next=null,l===null?Yn=u:l.next=u,u===null&&(Na=l)):(l=a,(t!==0||(n&3)!==0)&&(Gn=!0)),a=u}Lt!==0&&Lt!==5||Tu(t),Tl!==0&&(Tl=0)}function rd(t,e){for(var l=t.suspendedLanes,a=t.pingedLanes,u=t.expirationTimes,n=t.pendingLanes&-62914561;0r)break;var M=h.transferSize,C=h.initiatorType;M&&Sd(C)&&(h=h.responseEnd,i+=M*(h"u"?null:document;function Ud(t,e,l){var a=Ua;if(a&&typeof e=="string"&&e){var u=ve(e);u='link[rel="'+t+'"][href="'+u+'"]',typeof l=="string"&&(u+='[crossorigin="'+l+'"]'),Nd.has(u)||(Nd.add(u),t={rel:t,crossOrigin:l,href:e},a.querySelector(u)===null&&(e=a.createElement("link"),Kt(e,"link",t),Yt(e),a.head.appendChild(e)))}}function By(t){el.D(t),Ud("dns-prefetch",t,null)}function qy(t,e){el.C(t,e),Ud("preconnect",t,e)}function Ly(t,e,l){el.L(t,e,l);var a=Ua;if(a&&t&&e){var u='link[rel="preload"][as="'+ve(e)+'"]';e==="image"&&l&&l.imageSrcSet?(u+='[imagesrcset="'+ve(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(u+='[imagesizes="'+ve(l.imageSizes)+'"]')):u+='[href="'+ve(t)+'"]';var n=u;switch(e){case"style":n=Ca(t);break;case"script":n=xa(t)}Ae.has(n)||(t=z({rel:"preload",href:e==="image"&&l&&l.imageSrcSet?void 0:t,as:e},l),Ae.set(n,t),a.querySelector(u)!==null||e==="style"&&a.querySelector(Ru(n))||e==="script"&&a.querySelector(Ou(n))||(e=a.createElement("link"),Kt(e,"link",t),Yt(e),a.head.appendChild(e)))}}function Yy(t,e){el.m(t,e);var l=Ua;if(l&&t){var a=e&&typeof e.as=="string"?e.as:"script",u='link[rel="modulepreload"][as="'+ve(a)+'"][href="'+ve(t)+'"]',n=u;switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":n=xa(t)}if(!Ae.has(n)&&(t=z({rel:"modulepreload",href:t},e),Ae.set(n,t),l.querySelector(u)===null)){switch(a){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Ou(n)))return}a=l.createElement("link"),Kt(a,"link",t),Yt(a),l.head.appendChild(a)}}}function Gy(t,e,l){el.S(t,e,l);var a=Ua;if(a&&t){var u=ta(a).hoistableStyles,n=Ca(t);e=e||"default";var i=u.get(n);if(!i){var r={loading:0,preload:null};if(i=a.querySelector(Ru(n)))r.loading=5;else{t=z({rel:"stylesheet",href:t,"data-precedence":e},l),(l=Ae.get(n))&&Sf(t,l);var h=i=a.createElement("link");Yt(h),Kt(h,"link",t),h._p=new Promise(function(T,M){h.onload=T,h.onerror=M}),h.addEventListener("load",function(){r.loading|=1}),h.addEventListener("error",function(){r.loading|=2}),r.loading|=4,Kn(i,e,a)}i={type:"stylesheet",instance:i,count:1,state:r},u.set(n,i)}}}function Xy(t,e){el.X(t,e);var l=Ua;if(l&&t){var a=ta(l).hoistableScripts,u=xa(t),n=a.get(u);n||(n=l.querySelector(Ou(u)),n||(t=z({src:t,async:!0},e),(e=Ae.get(u))&&bf(t,e),n=l.createElement("script"),Yt(n),Kt(n,"link",t),l.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(u,n))}}function Qy(t,e){el.M(t,e);var l=Ua;if(l&&t){var a=ta(l).hoistableScripts,u=xa(t),n=a.get(u);n||(n=l.querySelector(Ou(u)),n||(t=z({src:t,async:!0,type:"module"},e),(e=Ae.get(u))&&bf(t,e),n=l.createElement("script"),Yt(n),Kt(n,"link",t),l.head.appendChild(n)),n={type:"script",instance:n,count:1,state:null},a.set(u,n))}}function Cd(t,e,l,a){var u=(u=nt.current)?Vn(u):null;if(!u)throw Error(f(446));switch(t){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(e=Ca(l.href),l=ta(u).hoistableStyles,a=l.get(e),a||(a={type:"style",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){t=Ca(l.href);var n=ta(u).hoistableStyles,i=n.get(t);if(i||(u=u.ownerDocument||u,i={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},n.set(t,i),(n=u.querySelector(Ru(t)))&&!n._p&&(i.instance=n,i.state.loading=5),Ae.has(t)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},Ae.set(t,l),n||Zy(u,t,l,i.state))),e&&a===null)throw Error(f(528,""));return i}if(e&&a!==null)throw Error(f(529,""));return null;case"script":return e=l.async,l=l.src,typeof l=="string"&&e&&typeof e!="function"&&typeof e!="symbol"?(e=xa(l),l=ta(u).hoistableScripts,a=l.get(e),a||(a={type:"script",instance:null,count:0,state:null},l.set(e,a)),a):{type:"void",instance:null,count:0,state:null};default:throw Error(f(444,t))}}function Ca(t){return'href="'+ve(t)+'"'}function Ru(t){return'link[rel="stylesheet"]['+t+"]"}function xd(t){return z({},t,{"data-precedence":t.precedence,precedence:null})}function Zy(t,e,l,a){t.querySelector('link[rel="preload"][as="style"]['+e+"]")?a.loading=1:(e=t.createElement("link"),a.preload=e,e.addEventListener("load",function(){return a.loading|=1}),e.addEventListener("error",function(){return a.loading|=2}),Kt(e,"link",l),Yt(e),t.head.appendChild(e))}function xa(t){return'[src="'+ve(t)+'"]'}function Ou(t){return"script[async]"+t}function jd(t,e,l){if(e.count++,e.instance===null)switch(e.type){case"style":var a=t.querySelector('style[data-href~="'+ve(l.href)+'"]');if(a)return e.instance=a,Yt(a),a;var u=z({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return a=(t.ownerDocument||t).createElement("style"),Yt(a),Kt(a,"style",u),Kn(a,l.precedence,t),e.instance=a;case"stylesheet":u=Ca(l.href);var n=t.querySelector(Ru(u));if(n)return e.state.loading|=4,e.instance=n,Yt(n),n;a=xd(l),(u=Ae.get(u))&&Sf(a,u),n=(t.ownerDocument||t).createElement("link"),Yt(n);var i=n;return i._p=new Promise(function(r,h){i.onload=r,i.onerror=h}),Kt(n,"link",a),e.state.loading|=4,Kn(n,l.precedence,t),e.instance=n;case"script":return n=xa(l.src),(u=t.querySelector(Ou(n)))?(e.instance=u,Yt(u),u):(a=l,(u=Ae.get(n))&&(a=z({},l),bf(a,u)),t=t.ownerDocument||t,u=t.createElement("script"),Yt(u),Kt(u,"link",a),t.head.appendChild(u),e.instance=u);case"void":return null;default:throw Error(f(443,e.type))}else e.type==="stylesheet"&&(e.state.loading&4)===0&&(a=e.instance,e.state.loading|=4,Kn(a,l.precedence,t));return e.instance}function Kn(t,e,l){for(var a=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),u=a.length?a[a.length-1]:null,n=u,i=0;i title"):null)}function Vy(t,e,l){if(l===1||e.itemProp!=null)return!1;switch(t){case"meta":case"title":return!0;case"style":if(typeof e.precedence!="string"||typeof e.href!="string"||e.href==="")break;return!0;case"link":if(typeof e.rel!="string"||typeof e.href!="string"||e.href===""||e.onLoad||e.onError)break;return e.rel==="stylesheet"?(t=e.disabled,typeof e.precedence=="string"&&t==null):!0;case"script":if(e.async&&typeof e.async!="function"&&typeof e.async!="symbol"&&!e.onLoad&&!e.onError&&e.src&&typeof e.src=="string")return!0}return!1}function qd(t){return!(t.type==="stylesheet"&&(t.state.loading&3)===0)}function Ky(t,e,l,a){if(l.type==="stylesheet"&&(typeof a.media!="string"||matchMedia(a.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var u=Ca(a.href),n=e.querySelector(Ru(u));if(n){e=n._p,e!==null&&typeof e=="object"&&typeof e.then=="function"&&(t.count++,t=Jn.bind(t),e.then(t,t)),l.state.loading|=4,l.instance=n,Yt(n);return}n=e.ownerDocument||e,a=xd(a),(u=Ae.get(u))&&Sf(a,u),n=n.createElement("link"),Yt(n);var i=n;i._p=new Promise(function(r,h){i.onload=r,i.onerror=h}),Kt(n,"link",a),l.instance=n}t.stylesheets===null&&(t.stylesheets=new Map),t.stylesheets.set(l,e),(e=l.state.preload)&&(l.state.loading&3)===0&&(t.count++,l=Jn.bind(t),e.addEventListener("load",l),e.addEventListener("error",l))}}var Ef=0;function wy(t,e){return t.stylesheets&&t.count===0&&Wn(t,t.stylesheets),0Ef?50:800)+e);return t.unsuspend=l,function(){t.unsuspend=null,clearTimeout(a),clearTimeout(u)}}:null}function Jn(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wn(this,this.stylesheets);else if(this.unsuspend){var t=this.unsuspend;this.unsuspend=null,t()}}}var $n=null;function Wn(t,e){t.stylesheets=null,t.unsuspend!==null&&(t.count++,$n=new Map,e.forEach(Jy,t),$n=null,Jn.call(t))}function Jy(t,e){if(!(e.state.loading&4)){var l=$n.get(t);if(l)var a=l.get(null);else{l=new Map,$n.set(t,l);for(var u=t.querySelectorAll("link[data-precedence],style[data-precedence]"),n=0;n"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(c)}catch(s){console.error(s)}}return c(),Nf.exports=rv(),Nf.exports}var ov=sv();var ch="popstate";function dv(c={}){function s(f,d){let{pathname:m,search:S,hash:R}=f.location;return Lf("",{pathname:m,search:S,hash:R},d.state&&d.state.usr||null,d.state&&d.state.key||"default")}function o(f,d){return typeof d=="string"?d:Hu(d)}return mv(s,o,null,c)}function Mt(c,s){if(c===!1||c===null||typeof c>"u")throw new Error(s)}function _e(c,s){if(!c){typeof console<"u"&&console.warn(s);try{throw new Error(s)}catch{}}}function hv(){return Math.random().toString(36).substring(2,10)}function fh(c,s){return{usr:c.state,key:c.key,idx:s}}function Lf(c,s,o=null,f){return{pathname:typeof c=="string"?c:c.pathname,search:"",hash:"",...typeof s=="string"?Ha(s):s,state:o,key:s&&s.key||f||hv()}}function Hu({pathname:c="/",search:s="",hash:o=""}){return s&&s!=="?"&&(c+=s.charAt(0)==="?"?s:"?"+s),o&&o!=="#"&&(c+=o.charAt(0)==="#"?o:"#"+o),c}function Ha(c){let s={};if(c){let o=c.indexOf("#");o>=0&&(s.hash=c.substring(o),c=c.substring(0,o));let f=c.indexOf("?");f>=0&&(s.search=c.substring(f),c=c.substring(0,f)),c&&(s.pathname=c)}return s}function mv(c,s,o,f={}){let{window:d=document.defaultView,v5Compat:m=!1}=f,S=d.history,R="POP",b=null,y=N();y==null&&(y=0,S.replaceState({...S.state,idx:y},""));function N(){return(S.state||{idx:null}).idx}function z(){R="POP";let Z=N(),J=Z==null?null:Z-y;y=Z,b&&b({action:R,location:X.location,delta:J})}function H(Z,J){R="PUSH";let G=Lf(X.location,Z,J);y=N()+1;let W=fh(G,y),$=X.createHref(G);try{S.pushState(W,"",$)}catch(P){if(P instanceof DOMException&&P.name==="DataCloneError")throw P;d.location.assign($)}m&&b&&b({action:R,location:X.location,delta:1})}function Q(Z,J){R="REPLACE";let G=Lf(X.location,Z,J);y=N();let W=fh(G,y),$=X.createHref(G);S.replaceState(W,"",$),m&&b&&b({action:R,location:X.location,delta:0})}function F(Z){return yv(Z)}let X={get action(){return R},get location(){return c(d,S)},listen(Z){if(b)throw new Error("A history only accepts one active listener");return d.addEventListener(ch,z),b=Z,()=>{d.removeEventListener(ch,z),b=null}},createHref(Z){return s(d,Z)},createURL:F,encodeLocation(Z){let J=F(Z);return{pathname:J.pathname,search:J.search,hash:J.hash}},push:H,replace:Q,go(Z){return S.go(Z)}};return X}function yv(c,s=!1){let o="http://localhost";typeof window<"u"&&(o=window.location.origin!=="null"?window.location.origin:window.location.href),Mt(o,"No window.location.(origin|href) available to create URL");let f=typeof c=="string"?c:Hu(c);return f=f.replace(/ $/,"%20"),!s&&f.startsWith("//")&&(f=o+f),new URL(f,o)}function hh(c,s,o="/"){return vv(c,s,o,!1)}function vv(c,s,o,f){let d=typeof s=="string"?Ha(s):s,m=al(d.pathname||"/",o);if(m==null)return null;let S=mh(c);gv(S);let R=null;for(let b=0;R==null&&b{let N={relativePath:y===void 0?S.path||"":y,caseSensitive:S.caseSensitive===!0,childrenIndex:R,route:S};if(N.relativePath.startsWith("/")){if(!N.relativePath.startsWith(f)&&b)return;Mt(N.relativePath.startsWith(f),`Absolute route path "${N.relativePath}" nested under path "${f}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),N.relativePath=N.relativePath.slice(f.length)}let z=ll([f,N.relativePath]),H=o.concat(N);S.children&&S.children.length>0&&(Mt(S.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${z}".`),mh(S.children,s,H,z,b)),!(S.path==null&&!S.index)&&s.push({path:z,score:Av(z,S.index),routesMeta:H})};return c.forEach((S,R)=>{if(S.path===""||!S.path?.includes("?"))m(S,R);else for(let b of yh(S.path))m(S,R,!0,b)}),s}function yh(c){let s=c.split("/");if(s.length===0)return[];let[o,...f]=s,d=o.endsWith("?"),m=o.replace(/\?$/,"");if(f.length===0)return d?[m,""]:[m];let S=yh(f.join("/")),R=[];return R.push(...S.map(b=>b===""?m:[m,b].join("/"))),d&&R.push(...S),R.map(b=>c.startsWith("/")&&b===""?"/":b)}function gv(c){c.sort((s,o)=>s.score!==o.score?o.score-s.score:_v(s.routesMeta.map(f=>f.childrenIndex),o.routesMeta.map(f=>f.childrenIndex)))}var pv=/^:[\w-]+$/,Sv=3,bv=2,Ev=1,Tv=10,zv=-2,rh=c=>c==="*";function Av(c,s){let o=c.split("/"),f=o.length;return o.some(rh)&&(f+=zv),s&&(f+=bv),o.filter(d=>!rh(d)).reduce((d,m)=>d+(pv.test(m)?Sv:m===""?Ev:Tv),f)}function _v(c,s){return c.length===s.length&&c.slice(0,-1).every((f,d)=>f===s[d])?c[c.length-1]-s[s.length-1]:0}function Rv(c,s,o=!1){let{routesMeta:f}=c,d={},m="/",S=[];for(let R=0;R{if(N==="*"){let F=R[H]||"";S=m.slice(0,m.length-F.length).replace(/(.)\/+$/,"$1")}const Q=R[H];return z&&!Q?y[N]=void 0:y[N]=(Q||"").replace(/%2F/g,"/"),y},{}),pathname:m,pathnameBase:S,pattern:c}}function Ov(c,s=!1,o=!0){_e(c==="*"||!c.endsWith("*")||c.endsWith("/*"),`Route path "${c}" will be treated as if it were "${c.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${c.replace(/\*$/,"/*")}".`);let f=[],d="^"+c.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(S,R,b)=>(f.push({paramName:R,isOptional:b!=null}),b?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return c.endsWith("*")?(f.push({paramName:"*"}),d+=c==="*"||c==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):o?d+="\\/*$":c!==""&&c!=="/"&&(d+="(?:(?=\\/|$))"),[new RegExp(d,s?void 0:"i"),f]}function Mv(c){try{return c.split("/").map(s=>decodeURIComponent(s).replace(/\//g,"%2F")).join("/")}catch(s){return _e(!1,`The URL path "${c}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${s}).`),c}}function al(c,s){if(s==="/")return c;if(!c.toLowerCase().startsWith(s.toLowerCase()))return null;let o=s.endsWith("/")?s.length-1:s.length,f=c.charAt(o);return f&&f!=="/"?null:c.slice(o)||"/"}var Dv=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;function Nv(c,s="/"){let{pathname:o,search:f="",hash:d=""}=typeof c=="string"?Ha(c):c,m;return o?(o=o.replace(/\/\/+/g,"/"),o.startsWith("/")?m=sh(o.substring(1),"/"):m=sh(o,s)):m=s,{pathname:m,search:xv(f),hash:jv(d)}}function sh(c,s){let o=s.replace(/\/+$/,"").split("/");return c.split("/").forEach(d=>{d===".."?o.length>1&&o.pop():d!=="."&&o.push(d)}),o.length>1?o.join("/"):"/"}function jf(c,s,o,f){return`Cannot include a '${c}' character in a manually specified \`to.${s}\` field [${JSON.stringify(f)}]. Please separate it out to the \`to.${o}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Uv(c){return c.filter((s,o)=>o===0||s.route.path&&s.route.path.length>0)}function Qf(c){let s=Uv(c);return s.map((o,f)=>f===s.length-1?o.pathname:o.pathnameBase)}function Zf(c,s,o,f=!1){let d;typeof c=="string"?d=Ha(c):(d={...c},Mt(!d.pathname||!d.pathname.includes("?"),jf("?","pathname","search",d)),Mt(!d.pathname||!d.pathname.includes("#"),jf("#","pathname","hash",d)),Mt(!d.search||!d.search.includes("#"),jf("#","search","hash",d)));let m=c===""||d.pathname==="",S=m?"/":d.pathname,R;if(S==null)R=o;else{let z=s.length-1;if(!f&&S.startsWith("..")){let H=S.split("/");for(;H[0]==="..";)H.shift(),z-=1;d.pathname=H.join("/")}R=z>=0?s[z]:"/"}let b=Nv(d,R),y=S&&S!=="/"&&S.endsWith("/"),N=(m||S===".")&&o.endsWith("/");return!b.pathname.endsWith("/")&&(y||N)&&(b.pathname+="/"),b}var ll=c=>c.join("/").replace(/\/\/+/g,"/"),Cv=c=>c.replace(/\/+$/,"").replace(/^\/*/,"/"),xv=c=>!c||c==="?"?"":c.startsWith("?")?c:"?"+c,jv=c=>!c||c==="#"?"":c.startsWith("#")?c:"#"+c,Hv=class{constructor(c,s,o,f=!1){this.status=c,this.statusText=s||"",this.internal=f,o instanceof Error?(this.data=o.toString(),this.error=o):this.data=o}};function Bv(c){return c!=null&&typeof c.status=="number"&&typeof c.statusText=="string"&&typeof c.internal=="boolean"&&"data"in c}function qv(c){return c.map(s=>s.route.path).filter(Boolean).join("/").replace(/\/\/*/g,"/")||"/"}var vh=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function gh(c,s){let o=c;if(typeof o!="string"||!Dv.test(o))return{absoluteURL:void 0,isExternal:!1,to:o};let f=o,d=!1;if(vh)try{let m=new URL(window.location.href),S=o.startsWith("//")?new URL(m.protocol+o):new URL(o),R=al(S.pathname,s);S.origin===m.origin&&R!=null?o=R+S.search+S.hash:d=!0}catch{_e(!1,` contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:f,isExternal:d,to:o}}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var ph=["POST","PUT","PATCH","DELETE"];new Set(ph);var Lv=["GET",...ph];new Set(Lv);var Ba=A.createContext(null);Ba.displayName="DataRouter";var ci=A.createContext(null);ci.displayName="DataRouterState";var Yv=A.createContext(!1),Sh=A.createContext({isTransitioning:!1});Sh.displayName="ViewTransition";var Gv=A.createContext(new Map);Gv.displayName="Fetchers";var Xv=A.createContext(null);Xv.displayName="Await";var me=A.createContext(null);me.displayName="Navigation";var Bu=A.createContext(null);Bu.displayName="Location";var Ne=A.createContext({outlet:null,matches:[],isDataRoute:!1});Ne.displayName="Route";var Vf=A.createContext(null);Vf.displayName="RouteError";var bh="REACT_ROUTER_ERROR",Qv="REDIRECT",Zv="ROUTE_ERROR_RESPONSE";function Vv(c){if(c.startsWith(`${bh}:${Qv}:{`))try{let s=JSON.parse(c.slice(28));if(typeof s=="object"&&s&&typeof s.status=="number"&&typeof s.statusText=="string"&&typeof s.location=="string"&&typeof s.reloadDocument=="boolean"&&typeof s.replace=="boolean")return s}catch{}}function Kv(c){if(c.startsWith(`${bh}:${Zv}:{`))try{let s=JSON.parse(c.slice(40));if(typeof s=="object"&&s&&typeof s.status=="number"&&typeof s.statusText=="string")return new Hv(s.status,s.statusText,s.data)}catch{}}function wv(c,{relative:s}={}){Mt(qa(),"useHref() may be used only in the context of a component.");let{basename:o,navigator:f}=A.useContext(me),{hash:d,pathname:m,search:S}=qu(c,{relative:s}),R=m;return o!=="/"&&(R=m==="/"?o:ll([o,m])),f.createHref({pathname:R,search:S,hash:d})}function qa(){return A.useContext(Bu)!=null}function Ue(){return Mt(qa(),"useLocation() may be used only in the context of a component."),A.useContext(Bu).location}var Eh="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function Th(c){A.useContext(me).static||A.useLayoutEffect(c)}function La(){let{isDataRoute:c}=A.useContext(Ne);return c?n0():Jv()}function Jv(){Mt(qa(),"useNavigate() may be used only in the context of a component.");let c=A.useContext(Ba),{basename:s,navigator:o}=A.useContext(me),{matches:f}=A.useContext(Ne),{pathname:d}=Ue(),m=JSON.stringify(Qf(f)),S=A.useRef(!1);return Th(()=>{S.current=!0}),A.useCallback((b,y={})=>{if(_e(S.current,Eh),!S.current)return;if(typeof b=="number"){o.go(b);return}let N=Zf(b,JSON.parse(m),d,y.relative==="path");c==null&&s!=="/"&&(N.pathname=N.pathname==="/"?s:ll([s,N.pathname])),(y.replace?o.replace:o.push)(N,y.state,y)},[s,o,m,d,c])}A.createContext(null);function zh(){let{matches:c}=A.useContext(Ne),s=c[c.length-1];return s?s.params:{}}function qu(c,{relative:s}={}){let{matches:o}=A.useContext(Ne),{pathname:f}=Ue(),d=JSON.stringify(Qf(o));return A.useMemo(()=>Zf(c,JSON.parse(d),f,s==="path"),[c,d,f,s])}function $v(c,s){return Ah(c,s)}function Ah(c,s,o,f,d){Mt(qa(),"useRoutes() may be used only in the context of a component.");let{navigator:m}=A.useContext(me),{matches:S}=A.useContext(Ne),R=S[S.length-1],b=R?R.params:{},y=R?R.pathname:"/",N=R?R.pathnameBase:"/",z=R&&R.route;{let G=z&&z.path||"";Rh(y,!z||G.endsWith("*")||G.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${y}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. - -Please change the parent to .`)}let H=Ue(),Q;if(s){let G=typeof s=="string"?Ha(s):s;Mt(N==="/"||G.pathname?.startsWith(N),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${N}" but pathname "${G.pathname}" was given in the \`location\` prop.`),Q=G}else Q=H;let F=Q.pathname||"/",X=F;if(N!=="/"){let G=N.replace(/^\//,"").split("/");X="/"+F.replace(/^\//,"").split("/").slice(G.length).join("/")}let Z=hh(c,{pathname:X});_e(z||Z!=null,`No routes matched location "${Q.pathname}${Q.search}${Q.hash}" `),_e(Z==null||Z[Z.length-1].route.element!==void 0||Z[Z.length-1].route.Component!==void 0||Z[Z.length-1].route.lazy!==void 0,`Matched leaf route at location "${Q.pathname}${Q.search}${Q.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let J=Pv(Z&&Z.map(G=>Object.assign({},G,{params:Object.assign({},b,G.params),pathname:ll([N,m.encodeLocation?m.encodeLocation(G.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:G.pathname]),pathnameBase:G.pathnameBase==="/"?N:ll([N,m.encodeLocation?m.encodeLocation(G.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:G.pathnameBase])})),S,o,f,d);return s&&J?A.createElement(Bu.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...Q},navigationType:"POP"}},J):J}function Wv(){let c=u0(),s=Bv(c)?`${c.status} ${c.statusText}`:c instanceof Error?c.message:JSON.stringify(c),o=c instanceof Error?c.stack:null,f="rgba(200,200,200, 0.5)",d={padding:"0.5rem",backgroundColor:f},m={padding:"2px 4px",backgroundColor:f},S=null;return console.error("Error handled by React Router default ErrorBoundary:",c),S=A.createElement(A.Fragment,null,A.createElement("p",null,"💿 Hey developer 👋"),A.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",A.createElement("code",{style:m},"ErrorBoundary")," or"," ",A.createElement("code",{style:m},"errorElement")," prop on your route.")),A.createElement(A.Fragment,null,A.createElement("h2",null,"Unexpected Application Error!"),A.createElement("h3",{style:{fontStyle:"italic"}},s),o?A.createElement("pre",{style:d},o):null,S)}var kv=A.createElement(Wv,null),_h=class extends A.Component{constructor(c){super(c),this.state={location:c.location,revalidation:c.revalidation,error:c.error}}static getDerivedStateFromError(c){return{error:c}}static getDerivedStateFromProps(c,s){return s.location!==c.location||s.revalidation!=="idle"&&c.revalidation==="idle"?{error:c.error,location:c.location,revalidation:c.revalidation}:{error:c.error!==void 0?c.error:s.error,location:s.location,revalidation:c.revalidation||s.revalidation}}componentDidCatch(c,s){this.props.onError?this.props.onError(c,s):console.error("React Router caught the following error during render",c)}render(){let c=this.state.error;if(this.context&&typeof c=="object"&&c&&"digest"in c&&typeof c.digest=="string"){const o=Kv(c.digest);o&&(c=o)}let s=c!==void 0?A.createElement(Ne.Provider,{value:this.props.routeContext},A.createElement(Vf.Provider,{value:c,children:this.props.component})):this.props.children;return this.context?A.createElement(Fv,{error:c},s):s}};_h.contextType=Yv;var Hf=new WeakMap;function Fv({children:c,error:s}){let{basename:o}=A.useContext(me);if(typeof s=="object"&&s&&"digest"in s&&typeof s.digest=="string"){let f=Vv(s.digest);if(f){let d=Hf.get(s);if(d)throw d;let m=gh(f.location,o);if(vh&&!Hf.get(s))if(m.isExternal||f.reloadDocument)window.location.href=m.absoluteURL||m.to;else{const S=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(m.to,{replace:f.replace}));throw Hf.set(s,S),S}return A.createElement("meta",{httpEquiv:"refresh",content:`0;url=${m.absoluteURL||m.to}`})}}return c}function Iv({routeContext:c,match:s,children:o}){let f=A.useContext(Ba);return f&&f.static&&f.staticContext&&(s.route.errorElement||s.route.ErrorBoundary)&&(f.staticContext._deepestRenderedBoundaryId=s.route.id),A.createElement(Ne.Provider,{value:c},o)}function Pv(c,s=[],o=null,f=null,d=null){if(c==null){if(!o)return null;if(o.errors)c=o.matches;else if(s.length===0&&!o.initialized&&o.matches.length>0)c=o.matches;else return null}let m=c,S=o?.errors;if(S!=null){let N=m.findIndex(z=>z.route.id&&S?.[z.route.id]!==void 0);Mt(N>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(S).join(",")}`),m=m.slice(0,Math.min(m.length,N+1))}let R=!1,b=-1;if(o)for(let N=0;N=0?m=m.slice(0,b+1):m=[m[0]];break}}}let y=o&&f?(N,z)=>{f(N,{location:o.location,params:o.matches?.[0]?.params??{},unstable_pattern:qv(o.matches),errorInfo:z})}:void 0;return m.reduceRight((N,z,H)=>{let Q,F=!1,X=null,Z=null;o&&(Q=S&&z.route.id?S[z.route.id]:void 0,X=z.route.errorElement||kv,R&&(b<0&&H===0?(Rh("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),F=!0,Z=null):b===H&&(F=!0,Z=z.route.hydrateFallbackElement||null)));let J=s.concat(m.slice(0,H+1)),G=()=>{let W;return Q?W=X:F?W=Z:z.route.Component?W=A.createElement(z.route.Component,null):z.route.element?W=z.route.element:W=N,A.createElement(Iv,{match:z,routeContext:{outlet:N,matches:J,isDataRoute:o!=null},children:W})};return o&&(z.route.ErrorBoundary||z.route.errorElement||H===0)?A.createElement(_h,{location:o.location,revalidation:o.revalidation,component:X,error:Q,children:G(),routeContext:{outlet:null,matches:J,isDataRoute:!0},onError:y}):G()},null)}function Kf(c){return`${c} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function t0(c){let s=A.useContext(Ba);return Mt(s,Kf(c)),s}function e0(c){let s=A.useContext(ci);return Mt(s,Kf(c)),s}function l0(c){let s=A.useContext(Ne);return Mt(s,Kf(c)),s}function wf(c){let s=l0(c),o=s.matches[s.matches.length-1];return Mt(o.route.id,`${c} can only be used on routes that contain a unique "id"`),o.route.id}function a0(){return wf("useRouteId")}function u0(){let c=A.useContext(Vf),s=e0("useRouteError"),o=wf("useRouteError");return c!==void 0?c:s.errors?.[o]}function n0(){let{router:c}=t0("useNavigate"),s=wf("useNavigate"),o=A.useRef(!1);return Th(()=>{o.current=!0}),A.useCallback(async(d,m={})=>{_e(o.current,Eh),o.current&&(typeof d=="number"?await c.navigate(d):await c.navigate(d,{fromRouteId:s,...m}))},[c,s])}var oh={};function Rh(c,s,o){!s&&!oh[c]&&(oh[c]=!0,_e(!1,o))}A.memo(i0);function i0({routes:c,future:s,state:o,onError:f}){return Ah(c,void 0,o,f,s)}function c0({to:c,replace:s,state:o,relative:f}){Mt(qa()," may be used only in the context of a component.");let{static:d}=A.useContext(me);_e(!d," must not be used on the initial render in a . This is a no-op, but you should modify your code so the is only ever rendered in response to some user interaction or state change.");let{matches:m}=A.useContext(Ne),{pathname:S}=Ue(),R=La(),b=Zf(c,Qf(m),S,f==="path"),y=JSON.stringify(b);return A.useEffect(()=>{R(JSON.parse(y),{replace:s,state:o,relative:f})},[R,y,f,s,o]),null}function kl(c){Mt(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function f0({basename:c="/",children:s=null,location:o,navigationType:f="POP",navigator:d,static:m=!1,unstable_useTransitions:S}){Mt(!qa(),"You cannot render a inside another . You should never have more than one in your app.");let R=c.replace(/^\/*/,"/"),b=A.useMemo(()=>({basename:R,navigator:d,static:m,unstable_useTransitions:S,future:{}}),[R,d,m,S]);typeof o=="string"&&(o=Ha(o));let{pathname:y="/",search:N="",hash:z="",state:H=null,key:Q="default"}=o,F=A.useMemo(()=>{let X=al(y,R);return X==null?null:{location:{pathname:X,search:N,hash:z,state:H,key:Q},navigationType:f}},[R,y,N,z,H,Q,f]);return _e(F!=null,` is not able to match the URL "${y}${N}${z}" because it does not start with the basename, so the won't render anything.`),F==null?null:A.createElement(me.Provider,{value:b},A.createElement(Bu.Provider,{children:s,value:F}))}function Oh({children:c,location:s}){return $v(Yf(c),s)}function Yf(c,s=[]){let o=[];return A.Children.forEach(c,(f,d)=>{if(!A.isValidElement(f))return;let m=[...s,d];if(f.type===A.Fragment){o.push.apply(o,Yf(f.props.children,m));return}Mt(f.type===kl,`[${typeof f.type=="string"?f.type:f.type.name}] is not a component. All component children of must be a or `),Mt(!f.props.index||!f.props.children,"An index route cannot have child routes.");let S={id:f.props.id||m.join("-"),caseSensitive:f.props.caseSensitive,element:f.props.element,Component:f.props.Component,index:f.props.index,path:f.props.path,middleware:f.props.middleware,loader:f.props.loader,action:f.props.action,hydrateFallbackElement:f.props.hydrateFallbackElement,HydrateFallback:f.props.HydrateFallback,errorElement:f.props.errorElement,ErrorBoundary:f.props.ErrorBoundary,hasErrorBoundary:f.props.hasErrorBoundary===!0||f.props.ErrorBoundary!=null||f.props.errorElement!=null,shouldRevalidate:f.props.shouldRevalidate,handle:f.props.handle,lazy:f.props.lazy};f.props.children&&(S.children=Yf(f.props.children,m)),o.push(S)}),o}var ui="get",ni="application/x-www-form-urlencoded";function fi(c){return typeof HTMLElement<"u"&&c instanceof HTMLElement}function r0(c){return fi(c)&&c.tagName.toLowerCase()==="button"}function s0(c){return fi(c)&&c.tagName.toLowerCase()==="form"}function o0(c){return fi(c)&&c.tagName.toLowerCase()==="input"}function d0(c){return!!(c.metaKey||c.altKey||c.ctrlKey||c.shiftKey)}function h0(c,s){return c.button===0&&(!s||s==="_self")&&!d0(c)}function Gf(c=""){return new URLSearchParams(typeof c=="string"||Array.isArray(c)||c instanceof URLSearchParams?c:Object.keys(c).reduce((s,o)=>{let f=c[o];return s.concat(Array.isArray(f)?f.map(d=>[o,d]):[[o,f]])},[]))}function m0(c,s){let o=Gf(c);return s&&s.forEach((f,d)=>{o.has(d)||s.getAll(d).forEach(m=>{o.append(d,m)})}),o}var ai=null;function y0(){if(ai===null)try{new FormData(document.createElement("form"),0),ai=!1}catch{ai=!0}return ai}var v0=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Bf(c){return c!=null&&!v0.has(c)?(_e(!1,`"${c}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${ni}"`),null):c}function g0(c,s){let o,f,d,m,S;if(s0(c)){let R=c.getAttribute("action");f=R?al(R,s):null,o=c.getAttribute("method")||ui,d=Bf(c.getAttribute("enctype"))||ni,m=new FormData(c)}else if(r0(c)||o0(c)&&(c.type==="submit"||c.type==="image")){let R=c.form;if(R==null)throw new Error('Cannot submit a