From d9a8317014c65aaa7121e649daf78e80abaddb3e Mon Sep 17 00:00:00 2001 From: Emirhan3 Date: Tue, 29 Sep 2026 14:06:27 +0000 Subject: [PATCH 01/16] fix: Darstellung von Logo, Schrift und Farben --- index.html | 60 +++++++++---------- src/features/booking/booking-confirmation.css | 32 +++++----- src/features/booking/booking.css | 12 ++-- src/styles/navigation.css | 22 ++++--- src/styles/packages.css | 36 +++++------ src/styles/styles.css | 42 ++++++------- 6 files changed, 104 insertions(+), 100 deletions(-) diff --git a/index.html b/index.html index 1e74bb1..d6bda2a 100644 --- a/index.html +++ b/index.html @@ -22,8 +22,8 @@ :root { --page-bg: #0d0d1a; --page-bg-2: #1a1a2e; - --green: #10b981; - --green-dark: #059669; + --brand: #53d5cd; + --brand-hover: #36b8b1; --white: #ffffff; --light: #f8fafc; --muted: #94a3b8; @@ -48,12 +48,12 @@ background: radial-gradient( circle at 12% 0%, - rgba(16, 185, 129, 0.09), + rgba(83, 213, 205, 0.09), transparent 30% ), radial-gradient( circle at 88% 26%, - rgba(16, 185, 129, 0.055), + rgba(83, 213, 205, 0.055), transparent 27% ), linear-gradient(145deg, var(--page-bg), var(--page-bg-2)); @@ -115,7 +115,7 @@ } .brand span { - color: var(--green); + color: var(--brand); } .nav-links { @@ -138,14 +138,14 @@ .nav-cta { padding: 11px 16px; - border: 1px solid rgba(16, 185, 129, 0.42); + border: 1px solid rgba(83, 213, 205, 0.42); border-radius: 999px; color: var(--white) !important; - background: rgba(16, 185, 129, 0.07); + background: rgba(83, 213, 205, 0.07); } .nav-cta:hover { - background: rgba(16, 185, 129, 0.14); + background: rgba(83, 213, 205, 0.14); } .container { @@ -155,7 +155,7 @@ .eyebrow { margin-bottom: 18px; - color: var(--green); + color: var(--brand); font-size: 0.72rem; font-weight: 700; letter-spacing: 0.18em; @@ -180,7 +180,7 @@ } .hero h1 .accent { - color: var(--green); + color: var(--brand); } .hero-lead { @@ -220,12 +220,12 @@ .button-primary { color: #06130f; - background: var(--green); - box-shadow: 0 14px 32px rgba(16, 185, 129, 0.18); + background: var(--brand); + box-shadow: 0 14px 32px rgba(83, 213, 205, 0.18); } .button-primary:hover { - background: #34d399; + background: #75e2dc; } .button-secondary { @@ -235,7 +235,7 @@ } .button-secondary:hover { - border-color: rgba(16, 185, 129, 0.55); + border-color: rgba(83, 213, 205, 0.55); } .hero-card { @@ -251,7 +251,7 @@ background: radial-gradient( circle at 72% 18%, - rgba(16, 185, 129, 0.2), + rgba(83, 213, 205, 0.2), transparent 32% ), linear-gradient( @@ -269,18 +269,18 @@ height: 230px; right: -75px; top: -75px; - border: 1px solid rgba(16, 185, 129, 0.24); + border: 1px solid rgba(83, 213, 205, 0.24); border-radius: 50%; box-shadow: - 0 0 0 34px rgba(16, 185, 129, 0.035), - 0 0 0 68px rgba(16, 185, 129, 0.02); + 0 0 0 34px rgba(83, 213, 205, 0.035), + 0 0 0 68px rgba(83, 213, 205, 0.02); } .hero-card-mark { position: absolute; top: 42px; left: 38px; - color: rgba(16, 185, 129, 0.88); + color: rgba(83, 213, 205, 0.88); font-size: 4.5rem; line-height: 1; } @@ -342,13 +342,13 @@ .topic:hover { transform: translateY(-4px); - border-color: rgba(16, 185, 129, 0.34); + border-color: rgba(83, 213, 205, 0.34); background: var(--panel-strong); } .topic-number { margin-bottom: 70px; - color: var(--green); + color: var(--brand); font-size: 0.75rem; font-weight: 700; letter-spacing: 0.14em; @@ -407,8 +407,8 @@ height: 10px; margin-top: 7px; border-radius: 50%; - background: var(--green); - box-shadow: 0 0 0 5px rgba(16, 185, 129, 0.08); + background: var(--brand); + box-shadow: 0 0 0 5px rgba(83, 213, 205, 0.08); } .review-section { @@ -504,8 +504,8 @@ input:focus, textarea:focus, select:focus { - border-color: rgba(16, 185, 129, 0.75); - box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1); + border-color: rgba(83, 213, 205, 0.75); + box-shadow: 0 0 0 3px rgba(83, 213, 205, 0.1); } .rating-input { @@ -533,7 +533,7 @@ .rating-input label:hover, .rating-input label:hover ~ label, .rating-input input:checked ~ label { - color: var(--green); + color: var(--brand); } .consent { @@ -547,7 +547,7 @@ .consent input { margin-top: 4px; - accent-color: var(--green); + accent-color: var(--brand); } .review-form .button { @@ -560,7 +560,7 @@ .form-status { min-height: 20px; margin-top: 12px; - color: var(--green); + color: var(--brand); font-size: 0.8rem; } @@ -594,7 +594,7 @@ flex: 0 0 auto; border-radius: 50%; color: #06130f; - background: var(--green); + background: var(--brand); font-size: 0.72rem; font-weight: 800; } @@ -613,7 +613,7 @@ } .stars { - color: var(--green); + color: var(--brand); letter-spacing: 0.08em; white-space: nowrap; } diff --git a/src/features/booking/booking-confirmation.css b/src/features/booking/booking-confirmation.css index 58d7eeb..0f20f8c 100644 --- a/src/features/booking/booking-confirmation.css +++ b/src/features/booking/booking-confirmation.css @@ -1,9 +1,10 @@ .confirmation { + --confirmation-accent: #53d5cd; margin: 0; min-height: 100vh; color: #f8fafc; background: - radial-gradient(ellipse at 5% 20%, #10b98114, transparent 45%), + radial-gradient(ellipse at 5% 20%, #53d5cd14, transparent 45%), radial-gradient(ellipse at 95% 45%, #1a1a2e, transparent 55%), #0d0d1a; font-family: Inter, system-ui, sans-serif; line-height: 1.65; @@ -21,7 +22,7 @@ text-decoration: none; } .confirmation a:focus-visible { - outline: 3px solid #10b981; + outline: 3px solid var(--confirmation-accent); outline-offset: 6px; } .confirmation__header { @@ -53,10 +54,9 @@ width: 3rem; height: 3rem; background: #f8fafc; - color: #087452; + color: var(--confirmation-accent); border-radius: 0.9rem; letter-spacing: -0.08em; - font-family: Georgia, serif; font-size: 1.3rem; } .confirmation__main { @@ -81,25 +81,25 @@ width: 1.6rem; height: 1.6rem; margin-right: 0.5rem; - border: 1px solid #10b98170; + border: 1px solid #53d5cd70; border-radius: 50%; - color: #10b981; + color: var(--confirmation-accent); } .confirmation h1 { margin: 1rem 0 1.5rem; - font-family: "Playfair Display", Georgia, serif; + font-family: inherit; font-weight: 500; font-size: clamp(2.5rem, 5vw, 4.5rem); line-height: 1.12; letter-spacing: -0.035em; } .confirmation h1 em { - color: #10b981; + color: var(--confirmation-accent); font-weight: inherit; } .confirmation h2 { margin: 0.5rem 0 1rem; - font-family: "Playfair Display", Georgia, serif; + font-family: inherit; font-weight: 500; font-size: 1.75rem; line-height: 1.3; @@ -114,7 +114,7 @@ .confirmation__simulation { color: #cbd5e1; padding-left: 1rem; - border-left: 2px solid #10b981; + border-left: 2px solid var(--confirmation-accent); font-size: 0.85rem; } .confirmation__grid { @@ -167,8 +167,8 @@ margin: 0.2rem 0 1rem; } .confirmation__mail { - border-color: #10b98140; - background: #10b98108; + border-color: #53d5cd40; + background: #53d5cd08; } .confirmation__mail h2 { font-family: inherit; @@ -193,7 +193,7 @@ content: "✓"; position: absolute; left: 0; - color: #10b981; + color: var(--confirmation-accent); } .confirmation__next { margin-top: 1.5rem; @@ -213,7 +213,7 @@ } .confirmation__steps li::before { content: "0" counter(steps); - color: #10b981; + color: var(--confirmation-accent); font-size: 0.8rem; } .confirmation__steps h3 { @@ -242,14 +242,14 @@ font-weight: 600; } .confirmation__button { - background: #10b981; + background: var(--confirmation-accent); color: #071a14 !important; } .confirmation__link { border: 1px solid #ffffff20; } .confirmation__button:hover { - background: #34d399; + background: #6de0d9; } .confirmation__link:hover { background: #ffffff08; diff --git a/src/features/booking/booking.css b/src/features/booking/booking.css index 2416eb9..c8f1ca9 100644 --- a/src/features/booking/booking.css +++ b/src/features/booking/booking.css @@ -53,8 +53,8 @@ border-style: dashed; } .booking__button { - color: #f7faf7; - background: #176448; + color: #061619; + background: #53d5cd; cursor: pointer; max-width: 100%; } @@ -69,7 +69,7 @@ outline-offset: 4px; } .booking__button:focus-visible { - outline-color: #18352b; + outline-color: #53d5cd; } .booking__errors, .booking__field-error { @@ -160,8 +160,8 @@ border-radius: 0.75rem; } .booking__dialog .booking__button { - background: #00b6c7; - border-color: #00b6c7; + background: #53d5cd; + border-color: #53d5cd; color: #061619; border-radius: 0.75rem; } @@ -188,5 +188,5 @@ .booking__dialog :focus-visible, .booking__dialog .booking__errors:focus, .booking__dialog .booking__result:focus { - outline-color: #00d6e8; + outline-color: #53d5cd; } diff --git a/src/styles/navigation.css b/src/styles/navigation.css index a67d028..e22d54c 100644 --- a/src/styles/navigation.css +++ b/src/styles/navigation.css @@ -5,7 +5,7 @@ :root { --nav-bg: #0d0d1a; --nav-border: rgba(248, 250, 252, 0.08); - --nav-green: #10b981; + --nav-accent: #53d5cd; --nav-white: #ffffff; --nav-light: #f8fafc; --nav-muted: #94a3b8; @@ -33,7 +33,7 @@ .navbar__inner { width: 100%; - min-height: 76px; + min-height: 96px; padding: 0 20px; display: flex; align-items: center; @@ -52,9 +52,13 @@ } .navbar__logo-img { - height: 40px; - width: auto; + width: 72px; + height: 72px; + padding: 5px; display: block; + object-fit: contain; + background: #fff; + border-radius: 16px; } .navbar__brand-text { @@ -119,7 +123,7 @@ } .navbar__link--home:hover { - border-color: rgba(16, 185, 129, 0.55); + border-color: rgba(83, 213, 205, 0.55); color: var(--nav-white); } @@ -127,7 +131,7 @@ display: inline-flex; align-items: center; justify-content: center; - color: #22d3ee; + color: var(--nav-accent); } .navbar__home-icon svg { @@ -142,7 +146,7 @@ .navbar a:focus-visible, .navbar button:focus-visible { - outline: 3px solid var(--nav-green); + outline: 3px solid var(--nav-accent); outline-offset: 2px; border-radius: 4px; } @@ -184,7 +188,7 @@ .navbar__nav { position: absolute; - top: 76px; + top: 96px; left: 0; right: 0; background: var(--nav-bg); @@ -217,5 +221,5 @@ /* Platz für die fixierte Navbar */ body { - padding-top: 76px; + padding-top: 96px; } diff --git a/src/styles/packages.css b/src/styles/packages.css index dd8c95b..c058b4b 100644 --- a/src/styles/packages.css +++ b/src/styles/packages.css @@ -3,8 +3,8 @@ min-height: 100vh; color: #f8fafc; background: - radial-gradient(circle at 12% 0%, #10b98117, transparent 30%), - radial-gradient(circle at 88% 26%, #10b9810e, transparent 27%), + radial-gradient(circle at 12% 0%, #53d5cd17, transparent 30%), + radial-gradient(circle at 88% 26%, #53d5cd0e, transparent 27%), linear-gradient(145deg, #0d0d1a, #1a1a2e); font-family: Inter, system-ui, sans-serif; line-height: 1.6; @@ -29,7 +29,7 @@ } .packages-eyebrow, .package-type { - color: #10b981; + color: #53d5cd; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.14em; @@ -82,9 +82,9 @@ .package-highlight { border-radius: 999px; padding: 0.25rem 0.65rem; - background: #10b98114; - color: #34d399; - border: 1px solid #10b98133; + background: #53d5cd14; + color: #75e2dc; + border: 1px solid #53d5cd33; font-size: 0.65rem; font-weight: 600; letter-spacing: 0.05em; @@ -137,30 +137,30 @@ cursor: pointer; } .package-btn:hover { - border-color: #10b981; - background: #10b98114; + border-color: #53d5cd; + background: #53d5cd14; } .package-btn.primary-cta { - background: #10b981; - border-color: #10b981; + background: #53d5cd; + border-color: #53d5cd; color: #06130f; } .package-btn.primary-cta:hover { - background: #34d399; + background: #75e2dc; } .package-btn:disabled { opacity: 0.65; cursor: wait; } .packages-section :focus-visible { - outline: 3px solid #10b981; + outline: 3px solid #53d5cd; outline-offset: 4px; } .packages-back { display: inline-block; margin-bottom: 2rem; padding-block: 0.5rem; - color: #34d399; + color: #75e2dc; text-decoration: none; } .detail-heading { @@ -188,7 +188,7 @@ margin-block: 0.65rem; } .detail-list li::marker { - color: #10b981; + color: #53d5cd; } .process-step { margin-top: 1rem; @@ -212,7 +212,7 @@ font-size: clamp(2rem, 4vw, 3rem); font-weight: 600; letter-spacing: -0.04em; - color: #34d399; + color: #75e2dc; } .price-note, .booking-notice { @@ -250,12 +250,12 @@ border-color: #94a3b840; } .packages-section .booking__dialog .booking__button:not(.booking__cancel) { - background: #10b981; - border-color: #10b981; + background: #53d5cd; + border-color: #53d5cd; color: #06130f; } .packages-section .booking__dialog :focus-visible { - outline-color: #10b981; + outline-color: #53d5cd; } @media (max-width: 60rem) { .packages-container { diff --git a/src/styles/styles.css b/src/styles/styles.css index 697e903..f4ae5cf 100644 --- a/src/styles/styles.css +++ b/src/styles/styles.css @@ -333,16 +333,16 @@ --color-yellow-300: oklch(90.5% 0.182 98.111); --color-yellow-500: oklch(79.5% 0.184 86.047); --color-yellow-700: oklch(55.4% 0.135 66.442); - --color-green-100: oklch(96.2% 0.044 156.743); - --color-green-200: oklch(92.5% 0.084 155.995); - --color-green-300: oklch(87.1% 0.15 154.449); - --color-green-400: oklch(79.2% 0.209 151.711); - --color-green-500: oklch(72.3% 0.219 149.579); - --color-green-600: oklch(62.7% 0.194 149.214); - --color-green-700: oklch(52.7% 0.154 150.069); - --color-green-800: oklch(44.8% 0.119 151.328); - --color-emerald-100: oklch(95% 0.052 163.051); - --color-emerald-400: oklch(76.5% 0.177 163.223); + --color-green-100: #e6fbf9; + --color-green-200: #cef7f4; + --color-green-300: #a5eee9; + --color-green-400: #78e2dc; + --color-green-500: #53d5cd; + --color-green-600: #36b8b1; + --color-green-700: #298f8b; + --color-green-800: #1e706d; + --color-emerald-100: #e6fbf9; + --color-emerald-400: #53d5cd; --color-teal-500: oklch(70.4% 0.14 182.503); --color-teal-600: oklch(60% 0.118 184.704); --color-cyan-100: oklch(95.6% 0.045 203.388); @@ -2483,7 +2483,7 @@ } } .border-emerald-400\/20 { - border-color: #00d29433; + border-color: #53d5cd33; } @supports (color: color-mix(in lab, red, red)) { .border-emerald-400\/20 { @@ -2495,7 +2495,7 @@ } } .border-emerald-400\/30 { - border-color: #00d2944d; + border-color: #53d5cd4d; } @supports (color: color-mix(in lab, red, red)) { .border-emerald-400\/30 { @@ -2540,7 +2540,7 @@ border-color: var(--color-green-500); } .border-green-500\/20 { - border-color: #00c75833; + border-color: #53d5cd33; } @supports (color: color-mix(in lab, red, red)) { .border-green-500\/20 { @@ -2552,7 +2552,7 @@ } } .border-green-500\/30 { - border-color: #00c7584d; + border-color: #53d5cd4d; } @supports (color: color-mix(in lab, red, red)) { .border-green-500\/30 { @@ -3109,7 +3109,7 @@ } } .bg-emerald-400\/10 { - background-color: #00d2941a; + background-color: #53d5cd1a; } @supports (color: color-mix(in lab, red, red)) { .bg-emerald-400\/10 { @@ -3164,7 +3164,7 @@ background-color: var(--color-green-100); } .bg-green-500\/10 { - background-color: #00c7581a; + background-color: #53d5cd1a; } @supports (color: color-mix(in lab, red, red)) { .bg-green-500\/10 { @@ -3176,7 +3176,7 @@ } } .bg-green-500\/20 { - background-color: #00c75833; + background-color: #53d5cd33; } @supports (color: color-mix(in lab, red, red)) { .bg-green-500\/20 { @@ -8681,8 +8681,8 @@ --ink-strong: oklch(20% 0.03 220); --surface-elevated: oklch(18% 0.026 221); --surface-soft: oklch(23% 0.028 219); - --accent-strong: oklch(70% 0.12 205); - --accent-muted: oklch(58% 0.09 205); + --accent-strong: #53d5cd; + --accent-muted: #36b8b1; --accent-warm: oklch(84% 0.16 87); --background: oklch(13% 0.022 223); --foreground: oklch(96% 0.008 210); @@ -8690,7 +8690,7 @@ --card-foreground: oklch(95% 0.008 210); --popover: oklch(17% 0.024 221); --popover-foreground: oklch(95% 0.008 210); - --primary: oklch(70% 0.12 205); + --primary: #53d5cd; --primary-foreground: oklch(18% 0.02 220); --secondary: oklch(24% 0.026 220); --secondary-foreground: oklch(90% 0.01 210); @@ -8710,7 +8710,7 @@ --chart-5: oklch(63% 0.09 177); --sidebar: oklch(15% 0.02 221); --sidebar-foreground: oklch(95% 0.008 210); - --sidebar-primary: oklch(70% 0.12 205); + --sidebar-primary: #53d5cd; --sidebar-primary-foreground: oklch(18% 0.02 220); --sidebar-accent: oklch(23% 0.026 219); --sidebar-accent-foreground: oklch(95% 0.008 210); From 5553d117d6f201b520eaa91b7b5955bfe0eeb4fa Mon Sep 17 00:00:00 2001 From: Marvin Gemlin Date: Tue, 29 Sep 2026 14:09:20 +0000 Subject: [PATCH 02/16] feat(contact): Beraterkontakt mit ID-Zuordnung und Kundenvalidierung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kontakt-Popup mit serverseitigem CSV-Abgleich, Mailpit-Bestätigungen und Weiterleitung zu Microsoft Bookings ergänzen. Berater über gemeinsame JSON-Daten zuordnen sowie Swagger, Integration, Testseite und automatisierte Tests dokumentieren. --- README.md | 6 + contact-test.html | 26 ++ docs/contact-integration.md | 98 +++++++ docs/contact.md | 156 ++++++++++ public/fonts/DM-Sans-LICENSE.txt | 93 ++++++ public/fonts/dm-sans-latin-400-normal.woff2 | Bin 0 -> 14200 bytes public/fonts/dm-sans-latin-500-normal.woff2 | Bin 0 -> 14304 bytes public/fonts/dm-sans-latin-700-normal.woff2 | Bin 0 -> 14348 bytes src/features/contact/contact-dialog.js | 126 ++++++++ src/features/contact/contact-entry.js | 13 + src/features/contact/contact-test.css | 29 ++ src/features/contact/contact.css | 152 ++++++++++ src/server/index.js | 16 ++ src/server/routes/bookings.js | 2 +- src/server/routes/contact.js | 38 +++ src/server/services/booking-service.js | 2 +- src/server/services/contact-email.js | 51 ++++ src/server/services/contact-service.js | 108 +++++++ src/server/services/email-service.js | 10 +- src/server/swagger.json | 304 +++++++++++++++++++- src/shared/berater-daten.json | 12 + src/shared/berater.js | 7 + src/shared/contact.js | 15 + src/tests/browser/contact.spec.js | 98 +++++++ src/tests/contact.test.js | 165 +++++++++++ src/tests/helpers/browser-server.js | 1 + vite.config.js | 3 + 27 files changed, 1526 insertions(+), 5 deletions(-) create mode 100644 contact-test.html create mode 100644 docs/contact-integration.md create mode 100644 docs/contact.md create mode 100644 public/fonts/DM-Sans-LICENSE.txt create mode 100644 public/fonts/dm-sans-latin-400-normal.woff2 create mode 100644 public/fonts/dm-sans-latin-500-normal.woff2 create mode 100644 public/fonts/dm-sans-latin-700-normal.woff2 create mode 100644 src/features/contact/contact-dialog.js create mode 100644 src/features/contact/contact-entry.js create mode 100644 src/features/contact/contact-test.css create mode 100644 src/features/contact/contact.css create mode 100644 src/server/routes/contact.js create mode 100644 src/server/services/contact-email.js create mode 100644 src/server/services/contact-service.js create mode 100644 src/shared/berater-daten.json create mode 100644 src/shared/berater.js create mode 100644 src/shared/contact.js create mode 100644 src/tests/browser/contact.spec.js create mode 100644 src/tests/contact.test.js diff --git a/README.md b/README.md index 0ca7144..77a7c5b 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,12 @@ angezeigt. Der Ablauf bleibt eine Simulation ohne Zahlung oder verbindliche Beratung. Buchungen liegen lokal in `src/server/data/bookings.csv`. Diese Datei nicht vorab leer anlegen: Das Backend erzeugt sie bei der ersten Buchung selbst. +## Beraterkontakt testen + +Die [Kontakt-Testseite](http://localhost:5173/contact-test.html?berater-id=anna-mueller) +öffnet das neue Popup. Kundenprüfung, Mailpit-Versand, Profil-Einbindung und +Checkliste sind in [docs/contact.md](docs/contact.md) dokumentiert. + ## Prüfen ```bash diff --git a/contact-test.html b/contact-test.html new file mode 100644 index 0000000..9705d86 --- /dev/null +++ b/contact-test.html @@ -0,0 +1,26 @@ + + + + + + Berater kontaktieren – Tri-Hub Testseite + + +
+

TRI-HUB · KONTAKT-DEMO

+

Dein direkter Draht zur Beratung

+

+ +

+ Testseite für das spätere Beraterprofil. Nutze eine + E-Mail-Adresse aus einer vorhandenen Testbuchung. +

+
+ + + diff --git a/docs/contact-integration.md b/docs/contact-integration.md new file mode 100644 index 0000000..3040cb8 --- /dev/null +++ b/docs/contact-integration.md @@ -0,0 +1,98 @@ +# Übergabe an die KI der Beraterprofilseite + +Binde das vorhandene Kontakt-Popup in die Kontaktbuttons der Beraterprofile +ein. Übergib ausschließlich die Berater-ID als `advisorId`. Implementiere +kein eigenes Kontaktformular und keine separate E-Mail-Prüfung. + +## Relevante Dateien + +- `src/shared/berater-daten.json`: gemeinsame Datenquelle für Profile und Kontakt; + Array mit eindeutigen String-IDs, `name` und `email`. Die aktuellen Einträge + sind Demo-Daten. Eigene öffentliche Profilfelder dürfen ergänzt werden. +- `src/shared/berater.js`: `findAdvisor(advisorId)` liefert den passenden Eintrag. +- `src/features/contact/contact-dialog.js`: exportiert `openContactDialog({ advisorId })`. +- `src/features/contact/contact.css`: wird automatisch vom Popup-Modul importiert; + die Schriftdateien liegen unter `public/fonts/`. +- `src/features/contact/contact-entry.js` und `contact-test.html`: Beispielintegration. +- `src/server/services/contact-service.js`: prüft Kunden-E-Mail und Berater-ID, + lädt die Empfängeradresse serverseitig aus der JSON. +- `src/server/swagger.json`: API-Vertrag für `POST /api/contact`. + +## Datenvertrag + +```json +[ + { + "id": "anna-mueller", + "name": "Anna Müller", + "email": "anna.mueller@tri-hub.de" + } +] +``` + +Die Profilseite und das Popup müssen dieselben IDs verwenden. E-Mail-Adressen +werden explizit gepflegt und nicht aus Namen erzeugt. Sie müssen auf `@tri-hub.de` +enden. Keine vertraulichen Informationen in die JSON schreiben: Sie ist Teil +des Frontends. Nach Änderungen API neu starten und Frontend neu bauen. + +## Einzubindender Code + +Beispielbutton (ID aus dem jeweiligen Profil): + +```html + +``` + +Im JavaScript-Modul der Profilseite, einmalig registrieren: + +```js +// Importpfad relativ zu dieser Datei anpassen. +import { openContactDialog } from "./src/features/contact/contact-dialog.js"; + +document.addEventListener("click", (event) => { + const button = event.target.closest("button[data-berater-id]"); + if (!button) return; + openContactDialog({ advisorId: button.dataset.beraterId }); +}); +``` + +Bei dynamischer Erzeugung des Buttons die ID aus dem Profil setzen: + +```js +button.dataset.beraterId = profile.id; +``` + +Alternativ direkt am einzelnen Button binden (nicht zusätzlich zur Delegation): + +```js +button.addEventListener("click", () => { + openContactDialog({ advisorId: profile.id }); +}); +``` + +Falls die Profilseite selbst Daten aus der gemeinsamen Datei benötigt: + +```js +// Beispiel für ein Modul direkt unter src/; Pfad ggf. anpassen. +import berater from "./shared/berater-daten.json" with { type: "json" }; + +const profile = berater.find((entry) => entry.id === advisorId); +// profile.name und profile.email stehen bei bekannter ID zur Verfügung. +``` + +Das Popup ermittelt den Anzeigenamen selbst und sendet beim Absenden +`{ email, advisorId, reason, simulationAccepted }` an `/api/contact`. Die +Profilseite muss weder Name noch E-Mail an das Popup schicken. Kundenprüfung, +Simulation, Mailpit-Versand und Microsoft-Bookings-Weiterleitung sind bereits +implementiert. Unbekannte IDs sperren das Absenden. + +## Testen + +Mit laufendem Frontend, API und Mailpit: +`http://localhost:5173/contact-test.html?berater-id=anna-mueller`. +Für die Kundenadresse eine vorhandene Testbuchung verwenden. Die Prüfung +findet ausschließlich beim Absenden statt. Der Branch ist +`feature/terminbuchung-kontaktfeld`; die Kontaktdateien müssen im Arbeitsstand +der Profilseite vorhanden sein. diff --git a/docs/contact.md b/docs/contact.md new file mode 100644 index 0000000..4026dfa --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,156 @@ +# Beraterkontakt (Simulation) + +## Testseite starten + +Wie bei der Buchung in drei Terminals starten: + +```sh +npm run dev:mail +npm run dev:server +npm run dev +``` + +Öffne . +Der Button öffnet ein modales Fenster. Gib eine E-Mail aus einer vorhandenen +Buchung in `src/server/data/bookings.csv` ein, wähle einen Kontaktgrund und +bestätige den Simulationshinweis. Beim Klick auf „Anfrage senden & Termin wählen“ +prüft der Server die E-Mail und versendet nur bei vorhandener Buchung. Bei Bedarf zuerst +über die bestehende Angebotsseite eine Testbuchung anlegen. + +Nach dem Absenden müssen zwei getrennte Nachrichten in + erscheinen: an die Kundenadresse und beispielsweise +`anna.mueller@tri-hub.de`. Der Browser wechselt anschließend zur vom Auftrag +vorgegebenen Microsoft-Bookings-Adresse. Es wird dort kein Termin automatisch +gebucht. Die Checkliste spricht von Microsoft Forms; umgesetzt ist der konkret +angegebene Bookings-Link. + +## Checkliste + +- [x] Kontaktgrund auswählbar: Coaching, Ernährungsplan, Wettkampfverpflegung, + Regeneration, Paketfragen, Termin und Sonstiges. +- [x] Getrennte Eingangsbestätigungen an Kunde und Berater, ausschließlich + simuliert über Mailpit, mit Kontaktgrund und Simulationshinweis. +- [x] Weiterleitung zur vorhandenen Microsoft-Bookings-Adresse nach Annahme + beider Nachrichten durch Mailpit; zusätzlicher Link als Rückfalloption. +- [x] Kontakt nur nach erfolgreichem E-Mail-Abgleich mit `bookings.csv`; + der Server prüft beim tatsächlichen Absenden erneut. + +## Einbindung in Beraterprofile + +Die Profilseite importiert `openContactDialog` aus +`src/features/contact/contact-dialog.js` und übergibt ausschließlich die ID: + +```js +import { openContactDialog } from "./src/features/contact/contact-dialog.js"; + +button.addEventListener("click", () => { + openContactDialog({ advisorId: profile.id }); +}); +``` + +Den Importpfad relativ zur einbindenden Datei anpassen. Das Modul bringt die +Popup-Styles und die lokalen DM-Sans-Schriftdateien mit. Die vollständige +Einbauanleitung für die Profilseite steht in [contact-integration.md](contact-integration.md). + +Die gemeinsame Datenquelle `src/shared/berater-daten.json` enthält ein Array +mit eindeutigen String-IDs und den Feldern `id`, `name`, `email`. Die beiden +vorhandenen Einträge sind Demo-Daten und können durch die tatsächlichen +Profildaten ersetzt werden. Zusätzliche Profilfelder sind möglich. Die Datei +wird im Frontend eingebunden: ausschließlich öffentliche Profildaten eintragen. + +`src/shared/berater.js` stellt `findAdvisor(advisorId)` bereit. Popup und Server +verwenden dieselbe Zuordnung. Der Server holt die Empfängeradresse ausschließlich +aus dieser JSON; vom Browser gesendete Namen oder Empfängeradressen werden +nicht übernommen. E-Mail-Adressen müssen gültig sein und auf `@tri-hub.de` +enden. Eine unbekannte ID wird abgelehnt und sperrt das Absenden im Popup. + +Die Testseite liest den URL-Parameter `berater-id`, zum Beispiel +`contact-test.html?berater-id=max-mustermann`. Ohne Parameter verwendet sie +`anna-mueller`. Nach Änderungen an der JSON den API-Server neu starten und für +das Deployment das Frontend neu bauen. + +Das native `dialog` hält den Tastaturfokus im Popup. Escape und Schließen +bringen ihn zum auslösenden Button zurück. Während einer Anfrage ist Schließen +kurz gesperrt, damit der Versand nicht unbemerkt weiterläuft. Das Fenster ist +auf schmalen Bildschirmen scrollbar. Die E-Mail wird bei jedem Absenden geprüft; +ein separater Prüfbutton ist nicht erforderlich. Es gibt keine zusätzlichen +Laufzeitabhängigkeiten. + +## API + +Der vollständige OpenAPI-Vertrag steht in `src/server/swagger.json`. +Beide Endpunkte erwarten POST mit `Content-Type: application/json`, maximal +8 KiB. Fehler enthalten `error.code` und `error.message`. + +| Endpunkt | Eingabe | Erfolg | +| ----------------------- | --------------------------------------------------- | ---------------------------------------------------------- | +| `/api/contact/validate` | `{ "email": "kunde@example.test" }` | 200: `{ "valid": true, "email": "kunde@example.test" }` | +| `/api/contact` | E-Mail, Berater-ID, Grund, Zustimmung (siehe unten) | 201: `simulated`, `emailStatus: "accepted"`, `redirectUrl` | + +```json +{ + "email": "kunde@example.test", + "advisorId": "anna-mueller", + "reason": "coaching", + "simulationAccepted": true +} +``` + +400 bedeutet ungültige Eingaben, 403 keine passende Buchung, 405 falsche Methode, +413 zu große Anfrage, 415 falscher Medientyp, 503 nicht lesbarer CSV-Speicher oder ungültige Beraterkontaktdaten. +502 bedeutet, dass mindestens eine Mailannahme fehlgeschlagen oder unklar ist; +der Browser leitet dann nicht weiter. 500 bezeichnet einen unerwarteten Fehler. +Die CSV wird ausschließlich gelesen und bleibt unverändert. Der separate +Validierungsendpunkt bleibt für API-Nutzer verfügbar; das Popup verwendet +ausschließlich `/api/contact` mit integrierter Kundenprüfung. + +## Grenzen der Simulation + +Der E-Mail-Abgleich ignoriert Groß-/Kleinschreibung und äußere Leerzeichen. +Er bestätigt einen Eintrag in der Buchungsdatei, nicht den Besitz des Postfachs. +Die Prüfantwort ist kein Anmeldetoken und gibt keine Buchungsdetails zurück. +Vor einem öffentlichen Produktiveinsatz wären eine Anmeldung oder Bestätigung +per E-Mail sowie ein Schutz vor automatisierten Adressabfragen erforderlich. + +Kontaktmails verwenden fest `127.0.0.1:1025`, unabhängig von einer eventuell +externen SMTP-Konfiguration des Buchungsablaufs. Mailpit muss deshalb auf +demselben Host laufen. Kunden- und Berateradresse sind simulierte Empfänger; +es erfolgt kein externer Versand. SMTP-Annahme ist keine reale Zustellbestätigung. + +Kontaktanfragen werden nicht dauerhaft gespeichert und haben keinen +Idempotenzschlüssel. Doppelklicks sind während des Versands gesperrt. Bei +Verbindungsabbrüchen oder Teilfehlern kann bereits eine Nachricht vorliegen: +vor manuellem Wiederholen Mailpit prüfen. Es gibt keinen automatischen Neuversand. + +## Prüfungen + +- `npm test`: API, CSV-Abgleich, erneute Validierung beim Absenden, ungültige + Eingaben, SMTP-Empfänger und Teilfehler; isolierte temporäre CSV-Dateien. +- `npm run test:browser`: vollständiger Ablauf einschließlich abgefangener + externer Weiterleitung, unbekannter Adresse, geänderter E-Mail, Versandfehler, + mobiler Darstellung, Fokus und Escape; zusätzlich bestehende Buchungstests. +- `npm run build` und `git diff --check`. +- Lokaler SMTP-Smoke-Test mit Mailpit: beide Empfänger und Simulationshinweis + in den empfangenen Nachrichten geprüft. + +Chromium muss für Playwright installiert sein (`npx playwright install chromium`). +In dieser Arbeitsumgebung liegt der Testbrowser unter `/tmp/trihub-playwright`; +hier mit `PLAYWRIGHT_BROWSERS_PATH=/tmp/trihub-playwright npm run test:browser` starten. +Der globale Formatcheck hat bereits bestehende Abweichungen in `src/main.js` +und `src/components/navigationsbar/README.md`; die Kontaktdateien sind formatiert. +Der bestehende Gesamt-Build meldet außerdem fehlende ältere Schriftdateien aus +dem globalen Stylesheet. Das Kontakt-Popup verwendet eigene lokale Schriftdateien. + +### Ergebnis dieser Umsetzung + +31 API-/Servicetests und alle vier Kontakt-Browsertests bestanden. +Build, lokale Mailpit-Prüfung und Formatierung der geänderten Dateien bestanden. +Die bestehenden Buchungs-Browsertests sind teilweise nicht mehr an das schon +vorhandene Buchungs-Popup angepasst: Sie suchen Formularfelder, ohne vorher +„Jetzt buchen“ zu klicken. Weitere Bestandsfälle erwarten einen nicht mehr vorhandenen Startseiten-Link +oder eine Seitennavigation, wo bereits ein Popup geöffnet wird. Beim ursprünglichen Gesamtlauf bestanden 7 von 15 Browsertests; die 8 Fehler +betrafen ausschließlich die unveränderten Buchungstests. Die gezielten +Kontakttests werden nach Anpassungen separat ausgeführt. +`git diff --check` ist für die eigenen Änderungen sauber; die zuvor bereits +geänderte `bookings.csv` erzeugt separat CRLF-Whitespace-Hinweise und wurde +von dieser Umsetzung nicht verändert. diff --git a/public/fonts/DM-Sans-LICENSE.txt b/public/fonts/DM-Sans-LICENSE.txt new file mode 100644 index 0000000..917aaa6 --- /dev/null +++ b/public/fonts/DM-Sans-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2014 The DM Sans Project Authors (https://github.com/googlefonts/dm-fonts) DMSans-Italic[opsz,wght].ttf: Copyright 2014 The DM Sans Project Authors (https://github.com/googlefonts/dm-fonts) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/fonts/dm-sans-latin-400-normal.woff2 b/public/fonts/dm-sans-latin-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0b8bc556cf4b4cbd5c82418947a159f9aaa3c6cc GIT binary patch literal 14200 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 DJVHD( literal 0 HcmV?d00001 diff --git a/public/fonts/dm-sans-latin-500-normal.woff2 b/public/fonts/dm-sans-latin-500-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..48e161289603aa2d4c9b83f294dc73af969b339a GIT binary patch literal 14304 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

cXva|Hg)2S=yXKRi7!R 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 literal 0 HcmV?d00001 diff --git a/public/fonts/dm-sans-latin-700-normal.woff2 b/public/fonts/dm-sans-latin-700-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..26edc56c122261f14290330af50bbff92e0a17b4 GIT binary patch literal 14348 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 KF@gpH`u_m@HIb44 literal 0 HcmV?d00001 diff --git a/src/features/contact/contact-dialog.js b/src/features/contact/contact-dialog.js new file mode 100644 index 0000000..c30192f --- /dev/null +++ b/src/features/contact/contact-dialog.js @@ -0,0 +1,126 @@ +import { findAdvisor } from "../../shared/berater.js"; +import { + contactReasons, + contactNotice, + contactBookingUrl, +} from "../../shared/contact.js"; +import "./contact.css"; + +// Auf Profilseiten: openContactDialog({ advisorId: profile.id }). +export function openContactDialog({ + advisorId, + navigate = (url) => window.location.assign(url), +} = {}) { + const advisor = findAdvisor(advisorId); + const returnFocus = document.activeElement; + const dialog = document.createElement("dialog"); + dialog.className = "contact-dialog"; + dialog.setAttribute("aria-labelledby", "contact-title"); + dialog.innerHTML = ` + +

DEIN NÄCHSTER SCHRITT

+

Berater kontaktieren

+

+
+
+ +

Verwende die E-Mail-Adresse, mit der du dein Paket gebucht hast.

+
+
+ +
+ +

+ +
`; + dialog.querySelector(".contact-advisor").textContent = advisor + ? `Deine Anfrage an ${advisor.name}` + : "Die Berater-ID fehlt oder ist unbekannt. Bitte öffne das Fenster über ein Beraterprofil."; + dialog.querySelector(".contact-consent span").textContent = contactNotice; + const form = dialog.querySelector("form"); + const email = form.elements.email; + const reason = form.elements.reason; + for (const [value, label] of Object.entries(contactReasons)) { + reason.add(new Option(label, value)); + } + const status = dialog.querySelector(".contact-status"); + const submit = dialog.querySelector(".contact-submit"); + const close = dialog.querySelector(".contact-close"); + let busy = false; + let sent = false; + function update() { + submit.disabled = busy || sent || !advisor; + close.disabled = busy; + email.disabled = busy || sent; + reason.disabled = busy || sent; + form.elements.simulationAccepted.disabled = busy || sent; + } + async function post(path, input) { + const response = await fetch(path, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(input), + }); + const result = await response.json(); + if (!response.ok) + throw new Error( + result.error?.message || "Die Anfrage ist fehlgeschlagen.", + ); + return result; + } + email.addEventListener("input", () => { + status.textContent = ""; + }); + form.addEventListener("submit", async (event) => { + event.preventDefault(); + if (submit.disabled || !form.reportValidity()) return; + const input = { + email: email.value, + advisorId, + reason: reason.value, + simulationAccepted: form.elements.simulationAccepted.checked, + }; + busy = true; + update(); + status.textContent = + "E-Mail wird geprüft und simulierte Anfrage gesendet …"; + try { + const result = await post("/api/contact", input); + if (result.redirectUrl !== contactBookingUrl) + throw new Error("Die Weiterleitungsadresse ist ungültig."); + sent = true; + status.textContent = + "Beide Bestätigungen wurden in Mailpit angenommen. Microsoft Bookings wird geöffnet. "; + const link = document.createElement("a"); + link.href = contactBookingUrl; + link.textContent = "Weiter zur Terminwahl"; + status.append(link); + navigate(contactBookingUrl); + } catch (error) { + status.textContent = `${error.message} Bei einem Verbindungsfehler bitte vor erneutem Senden Mailpit prüfen.`; + } finally { + busy = false; + update(); + } + }); + close.addEventListener("click", () => dialog.close()); + dialog.addEventListener("cancel", (event) => { + if (busy) event.preventDefault(); + }); + const previousOverflow = document.body.style.overflow; + dialog.addEventListener( + "close", + () => { + document.body.style.overflow = previousOverflow; + dialog.remove(); + returnFocus?.focus(); + }, + { once: true }, + ); + document.body.append(dialog); + document.body.style.overflow = "hidden"; + update(); + dialog.showModal(); + email.focus(); + return dialog; +} diff --git a/src/features/contact/contact-entry.js b/src/features/contact/contact-entry.js new file mode 100644 index 0000000..c8b4da8 --- /dev/null +++ b/src/features/contact/contact-entry.js @@ -0,0 +1,13 @@ +import { openContactDialog } from "./contact-dialog.js"; +import { findAdvisor } from "../../shared/berater.js"; +import "./contact-test.css"; + +const advisorId = + new URLSearchParams(location.search).get("berater-id") ?? "anna-mueller"; +const advisor = findAdvisor(advisorId); +document.querySelector("#advisor-name").textContent = advisor + ? `Dein Berater: ${advisor.name}` + : "Unbekannte Berater-ID"; +document + .querySelector("#open-contact") + .addEventListener("click", () => openContactDialog({ advisorId })); diff --git a/src/features/contact/contact-test.css b/src/features/contact/contact-test.css new file mode 100644 index 0000000..18607f8 --- /dev/null +++ b/src/features/contact/contact-test.css @@ -0,0 +1,29 @@ +body { + margin: 0; + background: oklch(13% 0.022 223); + color: oklch(96% 0.008 210); + font: + 16px/1.5 "DM Sans", + sans-serif; +} +.contact-test { + max-width: 680px; + margin: 12vh auto; + padding: 24px; +} +.contact-test > p { + color: oklch(72% 0.015 214); +} +.contact-test button { + padding: 14px 24px; + border: 0; + border-radius: 6px; + background: white; + color: oklch(20% 0.03 220); + font: inherit; + cursor: pointer; +} +.contact-test button:focus-visible { + outline: 3px solid oklch(70% 0.12 205 / 0.45); + outline-offset: 4px; +} diff --git a/src/features/contact/contact.css b/src/features/contact/contact.css new file mode 100644 index 0000000..1e53103 --- /dev/null +++ b/src/features/contact/contact.css @@ -0,0 +1,152 @@ +@font-face { + font-family: "DM Sans"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("/fonts/dm-sans-latin-400-normal.woff2") format("woff2"); +} +@font-face { + font-family: "DM Sans"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("/fonts/dm-sans-latin-500-normal.woff2") format("woff2"); +} +@font-face { + font-family: "DM Sans"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url("/fonts/dm-sans-latin-700-normal.woff2") format("woff2"); +} +.contact-dialog { + --contact-foreground: oklch(96% 0.008 210); + --contact-accent: oklch(70% 0.12 205); + box-sizing: border-box; + width: min(586px, calc(100% - 32px)); + max-height: calc(100dvh - 32px); + margin: auto; + padding: 32px; + border: 1px solid oklch(100% 0 0 / 0.1); + border-radius: 1.1rem; + background: oklch(17% 0.024 221); + color: var(--contact-foreground); + font: + 400 16px/1.5 "DM Sans", + sans-serif; + -webkit-font-smoothing: antialiased; + box-shadow: 0 24px 80px #0008; +} +.contact-dialog::backdrop { + background: #000a; + backdrop-filter: blur(4px); +} +.contact-dialog * { + box-sizing: border-box; +} +.contact-dialog h2 { + margin: 8px 32px 8px 0; + font-size: 28px; + line-height: 1.25; +} +.contact-dialog p { + margin: 0; +} +.contact-dialog .contact-eyebrow { + color: var(--contact-accent); + font-size: 12px; + letter-spacing: 0.12em; +} +.contact-advisor, +.contact-help, +.contact-consent { + color: oklch(72% 0.015 214); +} +.contact-form { + margin-top: 32px; + display: grid; + gap: 24px; +} +.contact-form label { + display: block; + margin-bottom: 8px; +} +.contact-form input:not([type="checkbox"]), +.contact-form select { + width: 100%; + min-height: 48px; + padding: 10px 12px; + border: 1px solid oklch(100% 0 0 / 0.12); + border-radius: 6px; + background: oklch(13% 0.022 223); + color: inherit; + font: inherit; + color-scheme: dark; +} +.contact-dialog button { + min-height: 44px; + padding: 10px 16px; + border: 0; + border-radius: 6px; + font: + 500 14px/1.5 "DM Sans", + sans-serif; + cursor: pointer; +} +.contact-dialog .contact-close { + float: right; + padding: 0; + width: 44px; + background: transparent; + color: inherit; + font-size: 28px; +} +.contact-submit { + width: 100%; + background: white; + color: oklch(20% 0.03 220); +} +.contact-submit:hover:not(:disabled) { + background: var(--contact-accent); +} + +.contact-dialog :disabled { + opacity: 0.5; + cursor: not-allowed; +} +.contact-dialog :focus-visible { + outline: 3px solid oklch(70% 0.12 205 / 0.45); + outline-offset: 3px; +} +.contact-dialog .contact-help { + margin-top: 8px; + font-size: 14px; +} +.contact-form .contact-consent { + display: flex; + align-items: flex-start; + gap: 12px; + margin: 0; + font-size: 14px; +} +.contact-consent input { + flex-shrink: 0; + width: 20px; + height: 20px; + margin: 2px 0 0; + accent-color: var(--contact-accent); +} +.contact-status { + overflow-wrap: anywhere; +} +.contact-status:empty { + display: none; +} +.contact-status a { + color: var(--contact-accent); +} +@media (max-width: 480px) { + .contact-dialog { + padding: 24px 20px; + } +} diff --git a/src/server/index.js b/src/server/index.js index b9abd1c..f3ead04 100644 --- a/src/server/index.js +++ b/src/server/index.js @@ -1,3 +1,6 @@ +import { createContactService } from "./services/contact-service.js"; +import { createContactEmailService } from "./services/contact-email.js"; +import { handleContact } from "./routes/contact.js"; import { createServer } from "node:http"; import { fileURLToPath, pathToFileURL } from "node:url"; import { packages } from "../shared/packages.js"; @@ -16,6 +19,7 @@ export function createApp({ ), details, sendConfirmation, + sendContact, } = {}) { const ids = new Set(); for (const entry of catalog) { @@ -42,8 +46,20 @@ export function createApp({ packages: catalog, sendConfirmation: sendConfirmation ?? createEmailService(), }); + const contact = createContactService({ + storage, + sendContact: sendContact ?? createContactEmailService(), + }); return createServer(async (request, response) => { const path = new URL(request.url, "http://localhost").pathname; + if (path === "/api/contact" || path === "/api/contact/validate") { + return handleContact( + request, + response, + contact, + path.endsWith("/validate"), + ); + } if (path === "/api/angebote" && request.method === "GET") { return json(response, 200, { packages: catalog.map(({ id, name, summary }) => ({ diff --git a/src/server/routes/bookings.js b/src/server/routes/bookings.js index 9209502..5618720 100644 --- a/src/server/routes/bookings.js +++ b/src/server/routes/bookings.js @@ -9,7 +9,7 @@ export function json(response, status, body) { response.end(JSON.stringify(body)); } -async function readJson(request) { +export async function readJson(request) { if ( request.headers["content-type"]?.split(";")[0].trim() !== "application/json" diff --git a/src/server/routes/contact.js b/src/server/routes/contact.js new file mode 100644 index 0000000..464e240 --- /dev/null +++ b/src/server/routes/contact.js @@ -0,0 +1,38 @@ +import { BookingError } from "../services/booking-service.js"; +import { json, readJson } from "./bookings.js"; + +export async function handleContact(request, response, service, validateOnly) { + if (request.method !== "POST") { + response.setHeader("Allow", "POST"); + return json(response, 405, { + error: { + code: "METHOD_NOT_ALLOWED", + message: "Bitte POST verwenden.", + }, + }); + } + try { + const input = await readJson(request); + const result = await (validateOnly + ? service.validate(input) + : service.submit(input)); + return json(response, validateOnly ? 200 : 201, result); + } catch (error) { + return json( + response, + error instanceof BookingError ? error.status : 500, + { + error: { + code: + error instanceof BookingError + ? error.code + : "INTERNAL_ERROR", + message: + error instanceof BookingError + ? error.message + : "Die Kontaktanfrage konnte nicht verarbeitet werden.", + }, + }, + ); + } +} diff --git a/src/server/services/booking-service.js b/src/server/services/booking-service.js index 5ecf2e2..4d04ec0 100644 --- a/src/server/services/booking-service.js +++ b/src/server/services/booking-service.js @@ -17,7 +17,7 @@ export class BookingError extends Error { const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; // Übliche unquotierte E-Mail-Adressen; einzelne Domainlabels maximal 63 Zeichen. -const emailPattern = +export const emailPattern = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i; function validateInput(input, key) { diff --git a/src/server/services/contact-email.js b/src/server/services/contact-email.js new file mode 100644 index 0000000..6186150 --- /dev/null +++ b/src/server/services/contact-email.js @@ -0,0 +1,51 @@ +import { createMailTransport } from "./email-service.js"; +import { BookingError } from "./booking-service.js"; +import { contactNotice } from "../../shared/contact.js"; + +export function createContactEmailService(makeTransport) { + // Dieser Ablauf bleibt auch bei extern konfiguriertem Buchungs-SMTP lokal. + const { transport, from } = createMailTransport( + { + SMTP_HOST: "127.0.0.1", + SMTP_PORT: "1025", + SMTP_FROM: "Tri-Hub Simulation ", + }, + makeTransport, + ); + return async ({ email, advisor, reason }) => { + const results = await Promise.allSettled( + [ + { + to: email, + text: `Deine Kontaktanfrage an ${advisor.name} ist in der Simulation eingegangen.`, + }, + { + to: advisor.email, + text: `Hallo ${advisor.name}, eine simulierte Kontaktanfrage von ${email} ist eingegangen.`, + }, + ].map(async ({ to, text }) => { + const result = await transport.sendMail({ + from, + to, + subject: + "Eingangsbestätigung – Tri-Hub Kontakt (Simulation)", + text: `${text}\n\nKontaktgrund: ${reason}\n\n${contactNotice}`, + }); + if ( + !result.accepted?.some( + (address) => address.toLowerCase() === to.toLowerCase(), + ) + ) { + throw new Error("SMTP hat den Empfänger nicht angenommen."); + } + }), + ); + if (results.some((result) => result.status === "rejected")) { + throw new BookingError( + 502, + "CONTACT_MAIL_FAILED", + "Nicht beide Bestätigungen konnten bestätigt werden. Bitte Mailpit prüfen, bevor du erneut sendest; eine Nachricht kann bereits eingegangen sein.", + ); + } + }; +} diff --git a/src/server/services/contact-service.js b/src/server/services/contact-service.js new file mode 100644 index 0000000..ea8ec82 --- /dev/null +++ b/src/server/services/contact-service.js @@ -0,0 +1,108 @@ +import { findAdvisor } from "../../shared/berater.js"; +import { BookingError, emailPattern } from "./booking-service.js"; +import { contactReasons, contactBookingUrl } from "../../shared/contact.js"; + +function advisorDetails(advisorId) { + const advisor = findAdvisor(advisorId); + if (!advisor) { + throw new BookingError( + 400, + "INVALID_ADVISOR", + "Bitte eine gültige Berater-ID übergeben.", + ); + } + if ( + typeof advisor.name !== "string" || + !advisor.name.trim() || + typeof advisor.email !== "string" || + advisor.email.length > 254 || + !emailPattern.test(advisor.email) || + advisor.email.split("@")[0].length > 64 || + !advisor.email.toLowerCase().endsWith("@tri-hub.de") + ) { + throw new BookingError( + 503, + "ADVISOR_UNAVAILABLE", + "Die Kontaktdaten dieses Beraters sind nicht verfügbar.", + ); + } + return { ...advisor }; +} + +export function createContactService({ storage, sendContact }) { + async function validate(input) { + if ( + !input || + typeof input !== "object" || + Array.isArray(input) || + typeof input.email !== "string" || + input.email.length > 254 + ) { + throw new BookingError( + 400, + "INVALID_EMAIL", + "Bitte eine gültige E-Mail-Adresse eingeben.", + ); + } + const email = input.email.trim().toLowerCase(); + if (!emailPattern.test(email) || email.split("@")[0].length > 64) { + throw new BookingError( + 400, + "INVALID_EMAIL", + "Bitte eine gültige E-Mail-Adresse eingeben.", + ); + } + let records; + try { + records = await storage.readAll(); + } catch { + throw new BookingError( + 503, + "STORAGE_UNAVAILABLE", + "Die Kundendaten können gerade nicht geprüft werden.", + ); + } + if (!records.some((row) => row.email?.trim().toLowerCase() === email)) { + throw new BookingError( + 403, + "CUSTOMER_NOT_FOUND", + "Zu dieser E-Mail-Adresse liegt keine Buchung vor. Bitte verwende die Adresse deiner Buchung.", + ); + } + return { email, valid: true }; + } + return { + validate, + async submit(input) { + const { email } = await validate(input); + const advisor = advisorDetails(input.advisorId); + if ( + typeof input.reason !== "string" || + !Object.hasOwn(contactReasons, input.reason) + ) { + throw new BookingError( + 400, + "INVALID_REASON", + "Bitte einen Kontaktgrund auswählen.", + ); + } + if (input.simulationAccepted !== true) { + throw new BookingError( + 400, + "SIMULATION_REQUIRED", + "Bitte den Simulationshinweis bestätigen.", + ); + } + await sendContact({ + email, + advisor, + reason: contactReasons[input.reason], + }); + return { + simulated: true, + emailStatus: "accepted", + redirectUrl: contactBookingUrl, + }; + }, + }; +} diff --git a/src/server/services/email-service.js b/src/server/services/email-service.js index a3415ec..be715c8 100644 --- a/src/server/services/email-service.js +++ b/src/server/services/email-service.js @@ -2,7 +2,7 @@ import nodemailer from "nodemailer"; import { orderSummaryRows } from "../../shared/order-summary.js"; import { paymentNotice } from "../../shared/booking-copy.js"; -export function createEmailService( +export function createMailTransport( env = process.env, makeTransport = nodemailer.createTransport, ) { @@ -34,6 +34,14 @@ export function createEmailService( disableUrlAccess: true, }); const from = env.SMTP_FROM || "Tri-Hub "; + return { transport, from }; +} + +export function createEmailService( + env = process.env, + makeTransport = nodemailer.createTransport, +) { + const { transport, from } = createMailTransport(env, makeTransport); return async function sendConfirmation(booking) { const order = booking.bookedPackage; const phone = booking.phone || booking.customer?.phone; diff --git a/src/server/swagger.json b/src/server/swagger.json index 7ba05eb..f703ecf 100644 --- a/src/server/swagger.json +++ b/src/server/swagger.json @@ -2,8 +2,8 @@ "openapi": "3.0.3", "info": { "title": "Tri-Hub Ernährungsberatung & Booking API", - "description": "API-Spezifikation für die Angebotsübersicht (US2.1), die Paket-Detailansicht und den Buchungsservice (US2.4 Paket buchen).", - "version": "1.1.0" + "description": "API-Spezifikation für die Angebotsübersicht (US2.1), die Paket-Detailansicht und den Buchungsservice (US2.4 Paket buchen). Kontakt-Simulation mit CSV-Kundenvalidierung und Mailpit.", + "version": "1.2.0" }, "servers": [ { @@ -224,6 +224,288 @@ } ] } + }, + "/contact/validate": { + "post": { + "tags": ["Contact"], + "summary": "Kunden-E-Mail prüfen", + "description": "Vergleicht normalisierte E-Mail mit bookings.csv. Kein Nachweis des Postfachbesitzes.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["email"], + "properties": { + "email": { + "type": "string", + "format": "email", + "maxLength": 254 + } + } + } + } + } + }, + "responses": { + "200": { + "description": "Kunde in CSV gefunden", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": ["valid", "email"], + "properties": { + "valid": { + "type": "boolean", + "enum": [true] + }, + "email": { + "type": "string", + "format": "email", + "maxLength": 254 + } + } + } + } + } + }, + "400": { + "description": "Ungültige Eingabe oder JSON", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "403": { + "description": "Keine Buchung zur E-Mail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "405": { + "description": "Nur POST erlaubt", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "413": { + "description": "Mehr als 8 KiB", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "415": { + "description": "Content-Type muss application/json sein", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "503": { + "description": "CSV nicht lesbar", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "500": { + "description": "Unerwarteter Fehler", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + } + } + } + }, + "/contact": { + "post": { + "tags": ["Contact"], + "summary": "Beraterkontakt simulieren", + "description": "Vergleicht normalisierte E-Mail mit bookings.csv. Kein Nachweis des Postfachbesitzes. Prüft CSV bei jedem Absenden erneut. Versand ausschließlich an lokales Mailpit (127.0.0.1:1025), zwei getrennte Bestätigungen. Kein automatischer Neuversand, keine persistente Kontaktablage.", + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "email", + "advisorId", + "reason", + "simulationAccepted" + ], + "properties": { + "email": { + "type": "string", + "format": "email", + "maxLength": 254 + }, + "reason": { + "type": "string", + "enum": [ + "coaching", + "nutrition", + "competition", + "recovery", + "package", + "appointment", + "other" + ] + }, + "simulationAccepted": { + "type": "boolean", + "enum": [true] + }, + "advisorId": { + "type": "string", + "example": "anna-mueller", + "description": "ID aus src/shared/berater-daten.json. Name und E-Mail werden serverseitig ausschließlich dort nachgeschlagen." + } + } + } + } + } + }, + "responses": { + "201": { + "description": "Beide simulierten E-Mails von Mailpit angenommen; Weiterleitung möglich", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "simulated", + "emailStatus", + "redirectUrl" + ], + "properties": { + "simulated": { + "type": "boolean", + "enum": [true] + }, + "emailStatus": { + "type": "string", + "enum": ["accepted"] + }, + "redirectUrl": { + "type": "string", + "format": "uri", + "description": "Feste Microsoft-Bookings-Adresse; keine benutzerdefinierten Redirects." + } + } + } + } + } + }, + "400": { + "description": "Ungültige Eingabe oder JSON", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "403": { + "description": "Keine Buchung zur E-Mail", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "405": { + "description": "Nur POST erlaubt", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "413": { + "description": "Mehr als 8 KiB", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "415": { + "description": "Content-Type muss application/json sein", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "503": { + "description": "CSV nicht lesbar oder Beraterkontaktdaten ungültig", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "500": { + "description": "Unerwarteter Fehler", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + }, + "502": { + "description": "Mindestens eine Mailannahme fehlgeschlagen oder unklar; vor Wiederholung Mailpit prüfen", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ContactError" + } + } + } + } + } + } } }, "components": { @@ -676,6 +958,24 @@ } } } + }, + "ContactError": { + "type": "object", + "required": ["error"], + "properties": { + "error": { + "type": "object", + "required": ["code", "message"], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } } } } diff --git a/src/shared/berater-daten.json b/src/shared/berater-daten.json new file mode 100644 index 0000000..7e7a860 --- /dev/null +++ b/src/shared/berater-daten.json @@ -0,0 +1,12 @@ +[ + { + "id": "anna-mueller", + "name": "Anna Müller", + "email": "anna.mueller@tri-hub.de" + }, + { + "id": "max-mustermann", + "name": "Max Mustermann", + "email": "max.mustermann@tri-hub.de" + } +] diff --git a/src/shared/berater.js b/src/shared/berater.js new file mode 100644 index 0000000..606e86f --- /dev/null +++ b/src/shared/berater.js @@ -0,0 +1,7 @@ +import berater from "./berater-daten.json" with { type: "json" }; + +export function findAdvisor(advisorId) { + return typeof advisorId === "string" + ? berater.find((entry) => entry.id === advisorId) + : undefined; +} diff --git a/src/shared/contact.js b/src/shared/contact.js new file mode 100644 index 0000000..41ae552 --- /dev/null +++ b/src/shared/contact.js @@ -0,0 +1,15 @@ +export const contactReasons = { + coaching: "Persönliches Coaching und Erstgespräch", + nutrition: "Ernährungsplan und Anpassungen", + competition: "Wettkampfverpflegung und Hydration", + recovery: "Regeneration und Verträglichkeit", + package: "Fragen zum gebuchten Paket", + appointment: "Termin vereinbaren oder ändern", + other: "Sonstiges Anliegen", +}; + +export const contactNotice = + "Dies ist eine Simulation des Kontaktprozesses. Die Bestätigungen werden nur im lokalen Mailpit gesammelt. Es wird kein Berater tatsächlich kontaktiert. Die Weiterleitung öffnet die externe Microsoft-Bookings-Seite; dort wird hierdurch kein Termin gebucht."; + +export const contactBookingUrl = + "https://bookings.cloud.microsoft/bookwithme/user/b055625c7e5b4bf3866230ffa066536b%40Tri-hub.de/meetingtype/qkJP99nqg0a_Na5Z-gY9WQ2?anonymous&ismsaljsauthenabled"; diff --git a/src/tests/browser/contact.spec.js b/src/tests/browser/contact.spec.js new file mode 100644 index 0000000..e869afe --- /dev/null +++ b/src/tests/browser/contact.spec.js @@ -0,0 +1,98 @@ +import { test, expect } from "@playwright/test"; +import { randomUUID } from "node:crypto"; +import { contactBookingUrl } from "../../shared/contact.js"; + +async function open(page) { + await page.goto("/contact-test.html?berater-id=max-mustermann"); + await page + .getByRole("button", { name: "Berater kontaktieren", exact: true }) + .click(); +} + +test("Popup prüft E-Mail beim Absenden und leitet nur bekannte Kunden weiter", async ({ + page, + request, +}) => { + const email = `kontakt-${randomUUID()}@example.test`; + const booking = await request.post("/api/bookings", { + headers: { "Idempotency-Key": randomUUID() }, + data: { packageId: "ernaehrung-starter", name: "Testkunde", email }, + }); + expect(booking.ok()).toBeTruthy(); + await open(page); + await expect(page.getByRole("dialog")).toContainText("Max Mustermann"); + const submit = page.getByRole("button", { name: "Anfrage senden" }); + await expect( + page.getByRole("button", { name: "E-Mail prüfen" }), + ).toHaveCount(0); + await expect(submit).toBeEnabled(); + await page + .getByLabel("Deine Buchungs-E-Mail") + .fill("unbekannt@example.test"); + await page.getByLabel("Grund für den Kontakt").selectOption("nutrition"); + await page.getByRole("checkbox").check(); + await submit.click(); + await expect(page.getByRole("status")).toContainText("keine Buchung"); + await expect(page.getByRole("dialog")).toBeVisible(); + await page.getByLabel("Deine Buchungs-E-Mail").fill(email); + await page.route("https://bookings.cloud.microsoft/**", (route) => + route.fulfill({ body: "Microsoft Bookings (Test)" }), + ); + const sentRequest = page.waitForRequest((request) => + request.url().endsWith("/api/contact"), + ); + await submit.click(); + expect((await sentRequest).postDataJSON().advisorId).toBe("max-mustermann"); + await expect(page).toHaveURL(contactBookingUrl); +}); + +test("Mobiles Popup: Fokus, Escape, Rückkehr zum Auslöser und keine Überbreite", async ({ + page, +}) => { + await page.setViewportSize({ width: 375, height: 667 }); + await open(page); + await expect(page.getByLabel("Deine Buchungs-E-Mail")).toBeFocused(); + const box = await page.getByRole("dialog").boundingBox(); + expect(box.x).toBeGreaterThanOrEqual(0); + expect(box.x + box.width).toBeLessThanOrEqual(375); + await page.keyboard.press("Shift+Tab"); + await expect( + page.getByRole("button", { name: "Kontaktfenster schließen" }), + ).toBeFocused(); + await page.keyboard.press("Escape"); + await expect(page.getByRole("dialog")).toHaveCount(0); + await expect( + page.getByRole("button", { name: "Berater kontaktieren", exact: true }), + ).toBeFocused(); +}); + +test("Versandfehler zeigt Meldung und bleibt im Popup", async ({ page }) => { + await page.route("**/api/contact", (route) => + route.fulfill({ + status: 502, + json: { error: { message: "Mailpit nicht erreichbar." } }, + }), + ); + await open(page); + await page.getByLabel("Deine Buchungs-E-Mail").fill("kunde@example.test"); + await page.getByLabel("Grund für den Kontakt").selectOption("package"); + await page.getByRole("checkbox").check(); + await page.getByRole("button", { name: "Anfrage senden" }).click(); + await expect(page.getByRole("status")).toContainText( + "Mailpit nicht erreichbar", + ); + await expect(page.getByRole("dialog")).toBeVisible(); +}); + +test("Unbekannte Berater-ID sperrt das Absenden", async ({ page }) => { + await page.goto("/contact-test.html?berater-id=unbekannt"); + await page + .getByRole("button", { name: "Berater kontaktieren", exact: true }) + .click(); + await expect(page.getByRole("dialog")).toContainText( + "Berater-ID fehlt oder ist unbekannt", + ); + await expect( + page.getByRole("button", { name: "Anfrage senden" }), + ).toBeDisabled(); +}); diff --git a/src/tests/contact.test.js b/src/tests/contact.test.js new file mode 100644 index 0000000..63e3a97 --- /dev/null +++ b/src/tests/contact.test.js @@ -0,0 +1,165 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { mkdtemp, rm } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { createApp } from "../server/index.js"; +import { createCsvStorage } from "../server/services/csv-storage.js"; +import { createContactEmailService } from "../server/services/contact-email.js"; +import { contactBookingUrl } from "../shared/contact.js"; + +async function fixture(t, options = {}) { + const dir = await mkdtemp(join(tmpdir(), "trihub-contact-")); + const storage = createCsvStorage(join(dir, "bookings.csv")); + await storage.writeAll([ + { + bookingId: "TH-000001", + email: "kunde@example.test", + name: "Testkunde", + }, + ]); + const sent = []; + const app = createApp({ + storage, + sendConfirmation: async () => {}, + sendContact: async (data) => sent.push(data), + ...options, + }); + await new Promise((resolve) => app.listen(0, "127.0.0.1", resolve)); + t.after(async () => { + app.closeAllConnections(); + await new Promise((resolve) => app.close(resolve)); + await rm(dir, { recursive: true, force: true }); + }); + const base = `http://127.0.0.1:${app.address().port}`; + const post = async (path, input) => { + const response = await fetch(base + path, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(input), + }); + return { status: response.status, body: await response.json() }; + }; + return { post, sent, storage, base }; +} +const input = { + email: "kunde@example.test", + advisorId: "anna-mueller", + reason: "coaching", + simulationAccepted: true, +}; + +test("CSV-Abgleich normalisiert E-Mail; Versand erhält Berater und festen Redirect", async (t) => { + const f = await fixture(t); + const before = await f.storage.readAll(); + const validation = await f.post("/api/contact/validate", { + email: " KUNDE@example.test ", + }); + assert.equal(validation.status, 200); + assert.equal(validation.body.email, input.email); + const result = await f.post("/api/contact", { + ...input, + advisor: "Manipuliert", + advisorEmail: "falsch@example.test", + }); + assert.equal(result.status, 201); + assert.equal(result.body.redirectUrl, contactBookingUrl); + assert.equal(result.body.simulated, true); + assert.equal(f.sent[0].advisor.email, "anna.mueller@tri-hub.de"); + assert.equal(f.sent[0].advisor.name, "Anna Müller"); + const second = await f.post("/api/contact", { + ...input, + advisorId: "max-mustermann", + }); + assert.equal(second.status, 201); + assert.equal(f.sent[1].advisor.email, "max.mustermann@tri-hub.de"); + assert.deepEqual(await f.storage.readAll(), before); +}); + +test("Ungültige und unbekannte Kunden, manipulierte Berater, Gründe und fehlende Zustimmung senden nichts", async (t) => { + const f = await fixture(t); + for (const [data, status] of [ + [null, 400], + [{ ...input, email: "bad" }, 400], + [{ ...input, email: "unknown@example.test" }, 403], + [{ ...input, advisorId: "unbekannt" }, 400], + [{ ...input, advisorId: null }, 400], + [{ ...input, reason: "__proto__" }, 400], + [{ ...input, simulationAccepted: false }, 400], + ]) + assert.equal((await f.post("/api/contact", data)).status, status); + assert.equal(f.sent.length, 0); +}); + +test("Absenden prüft CSV erneut; Speicherfehler bleiben geschlossen", async (t) => { + const f = await fixture(t); + assert.equal((await f.post("/api/contact/validate", input)).status, 200); + await f.storage.writeAll([]); + assert.equal((await f.post("/api/contact", input)).status, 403); + const broken = await fixture(t, { + storage: { + readAll() { + throw new Error("unavailable"); + }, + }, + }); + assert.equal((await broken.post("/api/contact", input)).status, 503); + assert.equal(broken.sent.length, 0); +}); + +test("HTTP-Vertrag weist falsche Methode, ungültiges JSON und große Requests zurück", async (t) => { + const f = await fixture(t); + assert.equal((await fetch(f.base + "/api/contact")).status, 405); + assert.equal( + (await fetch(f.base + "/api/contact", { method: "POST", body: "x" })) + .status, + 415, + ); + assert.equal( + ( + await fetch(f.base + "/api/contact", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: "{", + }) + ).status, + 400, + ); + assert.equal( + (await f.post("/api/contact", { email: "x".repeat(9000) })).status, + 413, + ); +}); + +test("Zwei getrennte simulierte Bestätigungen; Teilfehler verhindern Erfolg", async (t) => { + const messages = []; + const sender = createContactEmailService((config) => { + assert.equal(config.host, "127.0.0.1"); + assert.equal(config.port, 1025); + return { + async sendMail(message) { + messages.push(message); + return { accepted: [message.to] }; + }, + }; + }); + const f = await fixture(t, { sendContact: sender }); + assert.equal((await f.post("/api/contact", input)).status, 201); + assert.deepEqual( + messages.map((m) => m.to), + [input.email, "anna.mueller@tri-hub.de"], + ); + for (const message of messages) { + assert.match(message.text, /Simulation/); + assert.match(message.text, /Persönliches Coaching/); + } + const failing = createContactEmailService(() => ({ + async sendMail(message) { + return { accepted: message.to === input.email ? [message.to] : [] }; + }, + })); + const failure = await fixture(t, { sendContact: failing }); + const result = await failure.post("/api/contact", input); + assert.equal(result.status, 502); + assert.equal(result.body.redirectUrl, undefined); +}); diff --git a/src/tests/helpers/browser-server.js b/src/tests/helpers/browser-server.js index f83d189..e9805ce 100644 --- a/src/tests/helpers/browser-server.js +++ b/src/tests/helpers/browser-server.js @@ -11,6 +11,7 @@ const server = createApp({ catalog: packages, storage: createCsvStorage(join(directory, "bookings.csv")), sendConfirmation: async () => {}, + sendContact: async () => {}, }); server.listen(3000, "127.0.0.1"); async function stop() { diff --git a/vite.config.js b/vite.config.js index a849d45..a0e5234 100644 --- a/vite.config.js +++ b/vite.config.js @@ -19,6 +19,9 @@ export default defineConfig({ build: { rollupOptions: { input: { + contactTest: fileURLToPath( + new URL("./contact-test.html", import.meta.url), + ), angebote: fileURLToPath( new URL("./angebotsuebersicht.html", import.meta.url), ), From 8c0b1a3cb88c8936cd5364385d23ba3b58ef2bf1 Mon Sep 17 00:00:00 2001 From: Niels Yannick Tietze <3020513@stud.hs-mannheim.de> Date: Tue, 29 Sep 2026 16:33:28 +0200 Subject: [PATCH 03/16] =?UTF-8?q?Start=20Informationsgespr=C3=A4ch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- KontaktInfo.html | 25230 +++++ KontaktJS.js | 76394 ++++++++++++++++ src/components/navigationsbar/navigation.html | 2 +- 3 files changed, 101625 insertions(+), 1 deletion(-) create mode 100644 KontaktInfo.html create mode 100644 KontaktJS.js diff --git a/KontaktInfo.html b/KontaktInfo.html new file mode 100644 index 0000000..bfa045a --- /dev/null +++ b/KontaktInfo.html @@ -0,0 +1,25230 @@ + + + + + Triathlon ab 50 – Tri-hub Coaching für Best Ager + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+ Trihub Logo in den Markenfarben +
+
+

+ Tri-hub +

+

+ Kontakt & Unterstützung +

+
+
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+
+

+ Wir sind für dich da +

+

+ Hast du Fragen zu unseren Angeboten oder + möchtest mehr über Tri-hub erfahren? + Kontaktiere uns – wir freuen uns auf + dich! +

+
+
+ Tri-hub Trainer im Stadion +
+
+
+
+
+
+
+
+
+ 💬 +
+

+ Persönlicher Austausch +

+

+ Wir nehmen uns Zeit für deine Fragen und + Anliegen – schnell und unkompliziert. +

+
+
+
+ ⚡ +
+

+ Schnelle Antworten +

+

+ Deine Fragen beantworten wir zeitnah – + per Mail, Telefon oder persönlich. +

+
+
+
+ 🤝 +
+

+ Echte Beziehung +

+

+ Für uns zählt nicht nur die Antwort – + sondern der Mensch hinter der Frage. +

+
+
+
+
+
+
+
+

+ Schreib uns eine Nachricht +

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+
+
+
+

+ Kontaktinformationen +

+
+
+
+
+ + + + +
+
+

+ Allgemeine Fragen +

+ info@tri-hub.de +
+
+
+
+
+
+ + + + +
+
+

+ Technische Fragen & + Buchungen +

+ support@tri-hub.de +
+
+
+
+
+
+ + + +
+
+

+ Telefon +

+ 06203 / 1764877 +
+
+
+
+
+
+ + + + +
+
+

+ Adresse +

+
+

+ Schloßstr. 11 +

+

+ 68535 + Edingen-Neckarhausen +

+
+
+
+
+
+

+ Folge uns auf +

+ +
+
+
+
+
+
+
+
+

+ Unser Standort +

+
+
+

+ Karte momentan nicht verfügbar +

+

+ Die Adresse ist weiterhin erreichbar. + Bitte öffne Google Maps für die + Routenplanung. +

+ In Google Maps öffnen +
+
+
+
+
+
+ + +
+ + +
+ diff --git a/KontaktJS.js b/KontaktJS.js new file mode 100644 index 0000000..8d2ed15 --- /dev/null +++ b/KontaktJS.js @@ -0,0 +1,76394 @@ +function FF(A, t) { + for (var a = 0; a < t.length; a++) { + const S = t[a]; + if (typeof S != "string" && !Array.isArray(S)) { + for (const l in S) + if (l !== "default" && !(l in A)) { + const s = Object.getOwnPropertyDescriptor(S, l); + s && Object.defineProperty(A, l, s.get ? s : { + enumerable: !0, + get: () => S[l] + }) + } + } + } + return Object.freeze(Object.defineProperty(A, Symbol.toStringTag, { + value: "Module" + })) +} +(function() { + const t = document.createElement("link").relList; + if (t && t.supports && t.supports("modulepreload")) + return; + for (const l of document.querySelectorAll('link[rel="modulepreload"]')) + S(l); + new MutationObserver(l => { + for (const s of l) + if (s.type === "childList") + for (const E of s.addedNodes) + E.tagName === "LINK" && E.rel === "modulepreload" && S(E) + } + ).observe(document, { + childList: !0, + subtree: !0 + }); + function a(l) { + const s = {}; + return l.integrity && (s.integrity = l.integrity), + l.referrerPolicy && (s.referrerPolicy = l.referrerPolicy), + l.crossOrigin === "use-credentials" ? s.credentials = "include" : l.crossOrigin === "anonymous" ? s.credentials = "omit" : s.credentials = "same-origin", + s + } + function S(l) { + if (l.ep) + return; + l.ep = !0; + const s = a(l); + fetch(l.href, s) + } +} +)(); +function sY(A) { + return A && A.__esModule && Object.prototype.hasOwnProperty.call(A, "default") ? A.default : A +} +var wb = { + exports: {} +} + , Wk = {}; +/** + * @license React + * react-jsx-runtime.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var gW; +function xF() { + if (gW) + return Wk; + gW = 1; + var A = Symbol.for("react.transitional.element") + , t = Symbol.for("react.fragment"); + function a(S, l, s) { + var E = null; + if (s !== void 0 && (E = "" + s), + l.key !== void 0 && (E = "" + l.key), + "key" in l) { + s = {}; + for (var k in l) + k !== "key" && (s[k] = l[k]) + } else + s = l; + return l = s.ref, + { + $$typeof: A, + type: S, + key: E, + ref: l !== void 0 ? l : null, + props: s + } + } + return Wk.Fragment = t, + Wk.jsx = a, + Wk.jsxs = a, + Wk +} +var WW; +function yF() { + return WW || (WW = 1, + wb.exports = xF()), + wb.exports +} +var i = yF() + , FI = class { + constructor() { + this.listeners = new Set, + this.subscribe = this.subscribe.bind(this) + } + subscribe(A) { + return this.listeners.add(A), + this.onSubscribe(), + () => { + this.listeners.delete(A), + this.onUnsubscribe() + } + } + hasListeners() { + return this.listeners.size > 0 + } + onSubscribe() {} + onUnsubscribe() {} +} + , LF = class extends FI { + #A; + #t; + #a; + constructor() { + super(), + this.#a = A => { + if (typeof window < "u" && window.addEventListener) { + const t = () => A(); + return window.addEventListener("visibilitychange", t, !1), + () => { + window.removeEventListener("visibilitychange", t) + } + } + } + } + onSubscribe() { + this.#t || this.setEventListener(this.#a) + } + onUnsubscribe() { + this.hasListeners() || (this.#t?.(), + this.#t = void 0) + } + setEventListener(A) { + this.#a = A, + this.#t?.(), + this.#t = A(t => { + typeof t == "boolean" ? this.setFocused(t) : this.onFocus() + } + ) + } + setFocused(A) { + this.#A !== A && (this.#A = A, + this.onFocus()) + } + onFocus() { + const A = this.isFocused(); + this.listeners.forEach(t => { + t(A) + } + ) + } + isFocused() { + return typeof this.#A == "boolean" ? this.#A : globalThis.document?.visibilityState !== "hidden" + } +} + , YQ = new LF + , wF = { + setTimeout: (A, t) => setTimeout(A, t), + clearTimeout: A => clearTimeout(A), + setInterval: (A, t) => setInterval(A, t), + clearInterval: A => clearInterval(A) +} + , zF = class { + #A = wF; + #t = !1; + setTimeoutProvider(A) { + this.#A = A + } + setTimeout(A, t) { + return this.#A.setTimeout(A, t) + } + clearTimeout(A) { + this.#A.clearTimeout(A) + } + setInterval(A, t) { + return this.#A.setInterval(A, t) + } + clearInterval(A) { + this.#A.clearInterval(A) + } +} + , rI = new zF; +function OF(A) { + setTimeout(A, 0) +} +var VF = typeof window > "u" || "Deno" in globalThis; +function Ya() {} +function DF(A, t) { + return typeof A == "function" ? A(t) : A +} +function Ah(A) { + return typeof A == "number" && A >= 0 && A !== 1 / 0 +} +function IY(A, t) { + return Math.max(A + (t || 0) - Date.now(), 0) +} +function ks(A, t) { + return typeof A == "function" ? A(t) : A +} +function RS(A, t) { + return typeof A == "function" ? A(t) : A +} +function cW(A, t) { + const {type: a="all", exact: S, fetchStatus: l, predicate: s, queryKey: E, stale: k} = A; + if (E) { + if (S) { + if (t.queryHash !== NQ(E, t.options)) + return !1 + } else if (!hp(t.queryKey, E)) + return !1 + } + if (a !== "all") { + const p = t.isActive(); + if (a === "active" && !p || a === "inactive" && p) + return !1 + } + return !(typeof k == "boolean" && t.isStale() !== k || l && l !== t.state.fetchStatus || s && !s(t)) +} +function KW(A, t) { + const {exact: a, status: S, predicate: l, mutationKey: s} = A; + if (s) { + if (!t.options.mutationKey) + return !1; + if (a) { + if (bs(t.options.mutationKey) !== bs(s)) + return !1 + } else if (!hp(t.options.mutationKey, s)) + return !1 + } + return !(S && t.state.status !== S || l && !l(t)) +} +function NQ(A, t) { + return (t?.queryKeyHashFn || bs)(A) +} +function bs(A) { + return JSON.stringify(A, (t, a) => ah(a) ? Object.keys(a).sort().reduce( (S, l) => (S[l] = a[l], + S), {}) : a) +} +function hp(A, t) { + return A === t ? !0 : typeof A != typeof t ? !1 : A && t && typeof A == "object" && typeof t == "object" ? Object.keys(t).every(a => hp(A[a], t[a])) : !1 +} +var fF = Object.prototype.hasOwnProperty; +function uQ(A, t, a=0) { + if (A === t) + return A; + if (a > 500) + return t; + const S = GW(A) && GW(t); + if (!S && !(ah(A) && ah(t))) + return t; + const s = (S ? A : Object.keys(A)).length + , E = S ? t : Object.keys(t) + , k = E.length + , p = S ? new Array(k) : {}; + let m = 0; + for (let n = 0; n < k; n++) { + const J = S ? n : E[n] + , b = A[J] + , h = t[J]; + if (b === h) { + p[J] = b, + (S ? n < s : fF.call(A, J)) && m++; + continue + } + if (b === null || h === null || typeof b != "object" || typeof h != "object") { + p[J] = h; + continue + } + const U = uQ(b, h, a + 1); + p[J] = U, + U === b && m++ + } + return s === k && m === s ? A : p +} +function Qp(A, t) { + if (!t || Object.keys(A).length !== Object.keys(t).length) + return !1; + for (const a in A) + if (A[a] !== t[a]) + return !1; + return !0 +} +function GW(A) { + return Array.isArray(A) && A.length === Object.keys(A).length +} +function ah(A) { + if (!YW(A)) + return !1; + const t = A.constructor; + if (t === void 0) + return !0; + const a = t.prototype; + return !(!YW(a) || !a.hasOwnProperty("isPrototypeOf") || Object.getPrototypeOf(A) !== Object.prototype) +} +function YW(A) { + return Object.prototype.toString.call(A) === "[object Object]" +} +function vF(A) { + return new Promise(t => { + rI.setTimeout(t, A) + } + ) +} +function Sh(A, t, a) { + return typeof a.structuralSharing == "function" ? a.structuralSharing(A, t) : a.structuralSharing !== !1 ? uQ(A, t) : t +} +function XF(A, t, a=0) { + const S = [...A, t]; + return a && S.length > a ? S.slice(1) : S +} +function HF(A, t, a=0) { + const S = [t, ...A]; + return a && S.length > a ? S.slice(0, -1) : S +} +var ZS = Symbol(); +function EY(A, t) { + return !A.queryFn && t?.initialPromise ? () => t.initialPromise : !A.queryFn || A.queryFn === ZS ? () => Promise.reject(new Error(`Missing queryFn: '${A.queryHash}'`)) : A.queryFn +} +function MQ(A, t) { + return typeof A == "function" ? A(...t) : !!A +} +function PF(A, t, a) { + let S = !1, l; + return Object.defineProperty(A, "signal", { + enumerable: !0, + get: () => (l ??= t(), + S || (S = !0, + l.aborted ? a() : l.addEventListener("abort", a, { + once: !0 + })), + l) + }), + A +} +var Rp = ( () => { + let A = () => VF; + return { + isServer() { + return A() + }, + setIsServer(t) { + A = t + } + } +} +)(); +function ih() { + let A, t; + const a = new Promise( (l, s) => { + A = l, + t = s + } + ); + a.status = "pending", + a.catch( () => {} + ); + function S(l) { + Object.assign(a, l), + delete a.resolve, + delete a.reject + } + return a.resolve = l => { + S({ + status: "fulfilled", + value: l + }), + A(l) + } + , + a.reject = l => { + S({ + status: "rejected", + reason: l + }), + t(l) + } + , + a +} +var _F = OF; +function $F() { + let A = [] + , t = 0 + , a = k => { + k() + } + , S = k => { + k() + } + , l = _F; + const s = k => { + t ? A.push(k) : l( () => { + a(k) + } + ) + } + , E = () => { + const k = A; + A = [], + k.length && l( () => { + S( () => { + k.forEach(p => { + a(p) + } + ) + } + ) + } + ) + } + ; + return { + batch: k => { + let p; + t++; + try { + p = k() + } finally { + t--, + t || E() + } + return p + } + , + batchCalls: k => (...p) => { + s( () => { + k(...p) + } + ) + } + , + schedule: s, + setNotifyFunction: k => { + a = k + } + , + setBatchNotifyFunction: k => { + S = k + } + , + setScheduler: k => { + l = k + } + } +} +var FA = $F() + , tx = class extends FI { + #A = !0; + #t; + #a; + constructor() { + super(), + this.#a = A => { + if (typeof window < "u" && window.addEventListener) { + const t = () => A(!0) + , a = () => A(!1); + return window.addEventListener("online", t, !1), + window.addEventListener("offline", a, !1), + () => { + window.removeEventListener("online", t), + window.removeEventListener("offline", a) + } + } + } + } + onSubscribe() { + this.#t || this.setEventListener(this.#a) + } + onUnsubscribe() { + this.hasListeners() || (this.#t?.(), + this.#t = void 0) + } + setEventListener(A) { + this.#a = A, + this.#t?.(), + this.#t = A(this.setOnline.bind(this)) + } + setOnline(A) { + this.#A !== A && (this.#A = A, + this.listeners.forEach(a => { + a(A) + } + )) + } + isOnline() { + return this.#A + } +} + , TJ = new tx; +function Ax(A) { + return Math.min(1e3 * 2 ** A, 3e4) +} +function eY(A) { + return (A ?? "online") === "online" ? TJ.isOnline() : !0 +} +var lh = class extends Error { + constructor(A) { + super("CancelledError"), + this.revert = A?.revert, + this.silent = A?.silent + } +} +; +function kY(A) { + let t = !1, a = 0, S; + const l = ih() + , s = () => l.status !== "pending" + , E = R => { + if (!s()) { + const Z = new lh(R); + b(Z), + A.onCancel?.(Z) + } + } + , k = () => { + t = !0 + } + , p = () => { + t = !1 + } + , m = () => YQ.isFocused() && (A.networkMode === "always" || TJ.isOnline()) && A.canRun() + , n = () => eY(A.networkMode) && A.canRun() + , J = R => { + s() || (S?.(), + l.resolve(R)) + } + , b = R => { + s() || (S?.(), + l.reject(R)) + } + , h = () => new Promise(R => { + S = Z => { + (s() || m()) && R(Z) + } + , + A.onPause?.() + } + ).then( () => { + S = void 0, + s() || A.onContinue?.() + } + ) + , U = () => { + if (s()) + return; + let R; + const Z = a === 0 ? A.initialPromise : void 0; + try { + R = Z ?? A.fn() + } catch (g) { + R = Promise.reject(g) + } + Promise.resolve(R).then(J).catch(g => { + if (s()) + return; + const W = A.retry ?? (Rp.isServer() ? 0 : 3) + , c = A.retryDelay ?? Ax + , u = typeof c == "function" ? c(a, g) : c + , Y = W === !0 || typeof W == "number" && a < W || typeof W == "function" && W(a, g); + if (t || !Y) { + b(g); + return + } + a++, + A.onFail?.(a, g), + vF(u).then( () => m() ? void 0 : h()).then( () => { + t ? b(g) : U() + } + ) + } + ) + } + ; + return { + promise: l, + status: () => l.status, + cancel: E, + continue: () => (S?.(), + l), + cancelRetry: k, + continueRetry: p, + canStart: n, + start: () => (n() ? U() : h().then(U), + l) + } +} +var pY = class { + #A; + destroy() { + this.clearGcTimeout() + } + scheduleGc() { + this.clearGcTimeout(), + Ah(this.gcTime) && (this.#A = rI.setTimeout( () => { + this.optionalRemove() + } + , this.gcTime)) + } + updateGcTime(A) { + this.gcTime = Math.max(this.gcTime || 0, A ?? (Rp.isServer() ? 1 / 0 : 300 * 1e3)) + } + clearGcTimeout() { + this.#A !== void 0 && (rI.clearTimeout(this.#A), + this.#A = void 0) + } +} +; +function ax(A) { + return { + onFetch: (t, a) => { + const S = t.options + , l = t.fetchOptions?.meta?.fetchMore?.direction + , s = t.state.data?.pages || [] + , E = t.state.data?.pageParams || []; + let k = { + pages: [], + pageParams: [] + } + , p = 0; + const m = async () => { + let n = !1; + const J = U => { + PF(U, () => t.signal, () => n = !0) + } + , b = EY(t.options, t.fetchOptions) + , h = async (U, R, Z) => { + if (n) + return Promise.reject(t.signal.reason); + if (R == null && U.pages.length) + return Promise.resolve(U); + const W = ( () => { + const B = { + client: t.client, + queryKey: t.queryKey, + pageParam: R, + direction: Z ? "backward" : "forward", + meta: t.options.meta + }; + return J(B), + B + } + )() + , c = await b(W) + , {maxPages: u} = t.options + , Y = Z ? HF : XF; + return { + pages: Y(U.pages, c, u), + pageParams: Y(U.pageParams, R, u) + } + } + ; + if (l && s.length) { + const U = l === "backward" + , R = U ? rY : sh + , Z = { + pages: s, + pageParams: E + } + , g = R(S, Z); + k = await h(Z, g, U) + } else { + const U = A ?? s.length; + do { + const R = p === 0 ? E[0] ?? S.initialPageParam : sh(S, k); + if (p > 0 && R == null) + break; + k = await h(k, R), + p++ + } while (p < U) + } + return k + } + ; + t.options.persister ? t.fetchFn = () => t.options.persister?.(m, { + client: t.client, + queryKey: t.queryKey, + meta: t.options.meta, + signal: t.signal + }, a) : t.fetchFn = m + } + } +} +function sh(A, {pages: t, pageParams: a}) { + const S = t.length - 1; + return t.length > 0 ? A.getNextPageParam(t[S], t, a[S], a) : void 0 +} +function rY(A, {pages: t, pageParams: a}) { + return t.length > 0 ? A.getPreviousPageParam?.(t[0], t, a[0], a) : void 0 +} +function Sx(A, t) { + return t ? sh(A, t) != null : !1 +} +function ix(A, t) { + return !t || !A.getPreviousPageParam ? !1 : rY(A, t) != null +} +var lx = class extends pY { + #A; + #t; + #a; + #S; + #i; + #l; + #I; + #s; + constructor(A) { + super(), + this.#s = !1, + this.#I = A.defaultOptions, + this.setOptions(A.options), + this.observers = [], + this.#i = A.client, + this.#S = this.#i.getQueryCache(), + this.queryKey = A.queryKey, + this.queryHash = A.queryHash, + this.#t = uW(this.options), + this.state = A.state ?? this.#t, + this.scheduleGc() + } + get meta() { + return this.options.meta + } + get queryType() { + return this.#A + } + get promise() { + return this.#l?.promise + } + setOptions(A) { + if (this.options = { + ...this.#I, + ...A + }, + A?._type && (this.#A = A._type), + this.updateGcTime(this.options.gcTime), + this.state && this.state.data === void 0) { + const t = uW(this.options); + t.data !== void 0 && (this.setState(NW(t.data, t.dataUpdatedAt)), + this.#t = t) + } + } + optionalRemove() { + !this.observers.length && this.state.fetchStatus === "idle" && this.#S.remove(this) + } + setData(A, t) { + const a = Sh(this.state.data, A, this.options); + return this.#E({ + data: a, + type: "success", + dataUpdatedAt: t?.updatedAt, + manual: t?.manual + }), + a + } + setState(A) { + this.#E({ + type: "setState", + state: A + }) + } + cancel(A) { + const t = this.#l?.promise; + return this.#l?.cancel(A), + t ? t.then(Ya).catch(Ya) : Promise.resolve() + } + destroy() { + super.destroy(), + this.cancel({ + silent: !0 + }) + } + get resetState() { + return this.#t + } + reset() { + this.destroy(), + this.setState(this.resetState) + } + isActive() { + return this.observers.some(A => RS(A.options.enabled, this) !== !1) + } + isDisabled() { + return this.getObserversCount() > 0 ? !this.isActive() : this.options.queryFn === ZS || !this.isFetched() + } + isFetched() { + return this.state.dataUpdateCount + this.state.errorUpdateCount > 0 + } + isStatic() { + return this.getObserversCount() > 0 ? this.observers.some(A => ks(A.options.staleTime, this) === "static") : !1 + } + isStale() { + return this.getObserversCount() > 0 ? this.observers.some(A => A.getCurrentResult().isStale) : this.state.data === void 0 || this.state.isInvalidated + } + isStaleByTime(A=0) { + return this.state.data === void 0 ? !0 : A === "static" ? !1 : this.state.isInvalidated ? !0 : !IY(this.state.dataUpdatedAt, A) + } + onFocus() { + this.observers.find(t => t.shouldFetchOnWindowFocus())?.refetch({ + cancelRefetch: !1 + }), + this.#l?.continue() + } + onOnline() { + this.observers.find(t => t.shouldFetchOnReconnect())?.refetch({ + cancelRefetch: !1 + }), + this.#l?.continue() + } + addObserver(A) { + this.observers.includes(A) || (this.observers.push(A), + this.clearGcTimeout(), + this.#S.notify({ + type: "observerAdded", + query: this, + observer: A + })) + } + removeObserver(A) { + this.observers.includes(A) && (this.observers = this.observers.filter(t => t !== A), + this.observers.length || (this.#l && (this.#s || this.#k() ? this.#l.cancel({ + revert: !0 + }) : this.#l.cancelRetry()), + this.scheduleGc()), + this.#S.notify({ + type: "observerRemoved", + query: this, + observer: A + })) + } + getObserversCount() { + return this.observers.length + } + #k() { + return this.state.fetchStatus === "paused" && this.state.status === "pending" + } + invalidate() { + this.state.isInvalidated || this.#E({ + type: "invalidate" + }) + } + async fetch(A, t) { + if (this.state.fetchStatus !== "idle" && this.#l?.status() !== "rejected") { + if (this.state.data !== void 0 && t?.cancelRefetch) + this.cancel({ + silent: !0 + }); + else if (this.#l) + return this.#l.continueRetry(), + this.#l.promise + } + if (A && this.setOptions(A), + !this.options.queryFn) { + const p = this.observers.find(m => m.options.queryFn); + p && this.setOptions(p.options) + } + const a = new AbortController + , S = p => { + Object.defineProperty(p, "signal", { + enumerable: !0, + get: () => (this.#s = !0, + a.signal) + }) + } + , l = () => { + const p = EY(this.options, t) + , n = ( () => { + const J = { + client: this.#i, + queryKey: this.queryKey, + meta: this.meta + }; + return S(J), + J + } + )(); + return this.#s = !1, + this.options.persister ? this.options.persister(p, n, this) : p(n) + } + , E = ( () => { + const p = { + fetchOptions: t, + options: this.options, + queryKey: this.queryKey, + client: this.#i, + state: this.state, + fetchFn: l + }; + return S(p), + p + } + )(); + (this.#A === "infinite" ? ax(this.options.pages) : this.options.behavior)?.onFetch(E, this), + this.#a = this.state, + (this.state.fetchStatus === "idle" || this.state.fetchMeta !== E.fetchOptions?.meta) && this.#E({ + type: "fetch", + meta: E.fetchOptions?.meta + }), + this.#l = kY({ + initialPromise: t?.initialPromise, + fn: E.fetchFn, + onCancel: p => { + p instanceof lh && p.revert && this.setState({ + ...this.#a, + fetchStatus: "idle" + }), + a.abort() + } + , + onFail: (p, m) => { + this.#E({ + type: "failed", + failureCount: p, + error: m + }) + } + , + onPause: () => { + this.#E({ + type: "pause" + }) + } + , + onContinue: () => { + this.#E({ + type: "continue" + }) + } + , + retry: E.options.retry, + retryDelay: E.options.retryDelay, + networkMode: E.options.networkMode, + canRun: () => !0 + }); + try { + const p = await this.#l.start(); + if (p === void 0) + throw new Error(`${this.queryHash} data is undefined`); + return this.setData(p), + this.#S.config.onSuccess?.(p, this), + this.#S.config.onSettled?.(p, this.state.error, this), + p + } catch (p) { + if (p instanceof lh) { + if (p.silent) + return this.#l.promise; + if (p.revert) { + if (this.state.data === void 0) + throw p; + return this.state.data + } + } + throw this.#E({ + type: "error", + error: p + }), + this.#S.config.onError?.(p, this), + this.#S.config.onSettled?.(this.state.data, p, this), + p + } finally { + this.scheduleGc() + } + } + #E(A) { + const t = a => { + switch (A.type) { + case "failed": + return { + ...a, + fetchFailureCount: A.failureCount, + fetchFailureReason: A.error + }; + case "pause": + return { + ...a, + fetchStatus: "paused" + }; + case "continue": + return { + ...a, + fetchStatus: "fetching" + }; + case "fetch": + return { + ...a, + ...mY(a.data, this.options), + fetchMeta: A.meta ?? null + }; + case "success": + const S = { + ...a, + ...NW(A.data, A.dataUpdatedAt), + dataUpdateCount: a.dataUpdateCount + 1, + ...!A.manual && { + fetchStatus: "idle", + fetchFailureCount: 0, + fetchFailureReason: null + } + }; + return this.#a = A.manual ? S : void 0, + S; + case "error": + const l = A.error; + return { + ...a, + error: l, + errorUpdateCount: a.errorUpdateCount + 1, + errorUpdatedAt: Date.now(), + fetchFailureCount: a.fetchFailureCount + 1, + fetchFailureReason: l, + fetchStatus: "idle", + status: "error", + isInvalidated: !0 + }; + case "invalidate": + return { + ...a, + isInvalidated: !0 + }; + case "setState": + return { + ...a, + ...A.state + } + } + } + ; + this.state = t(this.state), + FA.batch( () => { + this.observers.forEach(a => { + a.onQueryUpdate() + } + ), + this.#S.notify({ + query: this, + type: "updated", + action: A + }) + } + ) + } +} +; +function mY(A, t) { + return { + fetchFailureCount: 0, + fetchFailureReason: null, + fetchStatus: eY(t.networkMode) ? "fetching" : "paused", + ...A === void 0 && { + error: null, + status: "pending" + } + } +} +function NW(A, t) { + return { + data: A, + dataUpdatedAt: t ?? Date.now(), + error: null, + isInvalidated: !1, + status: "success" + } +} +function uW(A) { + const t = typeof A.initialData == "function" ? A.initialData() : A.initialData + , a = t !== void 0 + , S = a ? typeof A.initialDataUpdatedAt == "function" ? A.initialDataUpdatedAt() : A.initialDataUpdatedAt : 0; + return { + data: t, + dataUpdateCount: 0, + dataUpdatedAt: a ? S ?? Date.now() : 0, + error: null, + errorUpdateCount: 0, + errorUpdatedAt: 0, + fetchFailureCount: 0, + fetchFailureReason: null, + fetchMeta: null, + isInvalidated: !1, + status: a ? "success" : "pending", + fetchStatus: "idle" + } +} +var vp = class extends FI { + constructor(A, t) { + super(), + this.options = t, + this.#A = A, + this.#s = null, + this.#I = ih(), + this.bindMethods(), + this.setOptions(t) + } + #A; + #t = void 0; + #a = void 0; + #S = void 0; + #i; + #l; + #I; + #s; + #k; + #E; + #m; + #p; + #J; + #e; + #C = new Set; + bindMethods() { + this.refetch = this.refetch.bind(this) + } + onSubscribe() { + this.listeners.size === 1 && (this.#t.addObserver(this), + MW(this.#t, this.options) ? this.#r() : this.updateResult(), + this.#h()) + } + onUnsubscribe() { + this.hasListeners() || this.destroy() + } + shouldFetchOnReconnect() { + return Ih(this.#t, this.options, this.options.refetchOnReconnect) + } + shouldFetchOnWindowFocus() { + return Ih(this.#t, this.options, this.options.refetchOnWindowFocus) + } + destroy() { + this.listeners = new Set, + this.#Q(), + this.#R(), + this.#t.removeObserver(this) + } + setOptions(A) { + const t = this.options + , a = this.#t; + if (this.options = this.#A.defaultQueryOptions(A), + this.options.enabled !== void 0 && typeof this.options.enabled != "boolean" && typeof this.options.enabled != "function" && typeof RS(this.options.enabled, this.#t) != "boolean") + throw new Error("Expected enabled to be a boolean or a callback that returns a boolean"); + this.#U(), + this.#t.setOptions(this.options), + t._defaulted && !Qp(this.options, t) && this.#A.getQueryCache().notify({ + type: "observerOptionsUpdated", + query: this.#t, + observer: this + }); + const S = this.hasListeners(); + S && BW(this.#t, a, this.options, t) && this.#r(), + this.updateResult(), + S && (this.#t !== a || RS(this.options.enabled, this.#t) !== RS(t.enabled, this.#t) || ks(this.options.staleTime, this.#t) !== ks(t.staleTime, this.#t)) && this.#n(); + const l = this.#b(); + S && (this.#t !== a || RS(this.options.enabled, this.#t) !== RS(t.enabled, this.#t) || l !== this.#e) && this.#o(l) + } + getOptimisticResult(A) { + const t = this.#A.getQueryCache().build(this.#A, A) + , a = this.createResult(t, A); + return Ix(this, a) && (this.#S = a, + this.#l = this.options, + this.#i = this.#t.state), + a + } + getCurrentResult() { + return this.#S + } + trackResult(A, t) { + return new Proxy(A,{ + get: (a, S) => (this.trackProp(S), + t?.(S), + S === "promise" && (this.trackProp("data"), + !this.options.experimental_prefetchInRender && this.#I.status === "pending" && this.#I.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))), + Reflect.get(a, S)) + }) + } + trackProp(A) { + this.#C.add(A) + } + getCurrentQuery() { + return this.#t + } + refetch({...A}={}) { + return this.fetch({ + ...A + }) + } + fetchOptimistic(A) { + const t = this.#A.defaultQueryOptions(A) + , a = this.#A.getQueryCache().build(this.#A, t); + return a.fetch().then( () => this.createResult(a, t)) + } + fetch(A) { + return this.#r({ + ...A, + cancelRefetch: A.cancelRefetch ?? !0 + }).then( () => (this.updateResult(), + this.#S)) + } + #r(A) { + this.#U(); + let t = this.#t.fetch(this.options, A); + return A?.throwOnError || (t = t.catch(Ya)), + t + } + #n() { + this.#Q(); + const A = ks(this.options.staleTime, this.#t); + if (Rp.isServer() || this.#S.isStale || !Ah(A)) + return; + const a = IY(this.#S.dataUpdatedAt, A) + 1; + this.#p = rI.setTimeout( () => { + this.#S.isStale || this.updateResult() + } + , a) + } + #b() { + return (typeof this.options.refetchInterval == "function" ? this.options.refetchInterval(this.#t) : this.options.refetchInterval) ?? !1 + } + #o(A) { + this.#R(), + this.#e = A, + !(Rp.isServer() || RS(this.options.enabled, this.#t) === !1 || !Ah(this.#e) || this.#e === 0) && (this.#J = rI.setInterval( () => { + (this.options.refetchIntervalInBackground || YQ.isFocused()) && this.#r() + } + , this.#e)) + } + #h() { + this.#n(), + this.#o(this.#b()) + } + #Q() { + this.#p !== void 0 && (rI.clearTimeout(this.#p), + this.#p = void 0) + } + #R() { + this.#J !== void 0 && (rI.clearInterval(this.#J), + this.#J = void 0) + } + createResult(A, t) { + const a = this.#t + , S = this.options + , l = this.#S + , s = this.#i + , E = this.#l + , p = A !== a ? A.state : this.#a + , {state: m} = A; + let n = { + ...m + }, J = !1, b; + if (t._optimisticResults) { + const M = this.hasListeners() + , L = !M && MW(A, t) + , v = M && BW(A, a, t, S); + (L || v) && (n = { + ...n, + ...mY(m.data, A.options) + }), + t._optimisticResults === "isRestoring" && (n.fetchStatus = "idle") + } + let {error: h, errorUpdatedAt: U, status: R} = n; + b = n.data; + let Z = !1; + if (t.placeholderData !== void 0 && b === void 0 && R === "pending") { + let M; + l?.isPlaceholderData && t.placeholderData === E?.placeholderData ? (M = l.data, + Z = !0) : M = typeof t.placeholderData == "function" ? t.placeholderData(this.#m?.state.data, this.#m) : t.placeholderData, + M !== void 0 && (R = "success", + b = Sh(l?.data, M, t), + J = !0) + } + if (t.select && b !== void 0 && !Z) + if (l && b === s?.data && t.select === this.#k) + b = this.#E; + else + try { + this.#k = t.select, + b = t.select(b), + b = Sh(l?.data, b, t), + this.#E = b, + this.#s = null + } catch (M) { + this.#s = M + } + this.#s && (h = this.#s, + b = this.#E, + U = Date.now(), + R = "error"); + const g = n.fetchStatus === "fetching" + , W = R === "pending" + , c = R === "error" + , u = W && g + , Y = b !== void 0 + , G = { + status: R, + fetchStatus: n.fetchStatus, + isPending: W, + isSuccess: R === "success", + isError: c, + isInitialLoading: u, + isLoading: u, + data: b, + dataUpdatedAt: n.dataUpdatedAt, + error: h, + errorUpdatedAt: U, + failureCount: n.fetchFailureCount, + failureReason: n.fetchFailureReason, + errorUpdateCount: n.errorUpdateCount, + isFetched: A.isFetched(), + isFetchedAfterMount: n.dataUpdateCount > p.dataUpdateCount || n.errorUpdateCount > p.errorUpdateCount, + isFetching: g, + isRefetching: g && !W, + isLoadingError: c && !Y, + isPaused: n.fetchStatus === "paused", + isPlaceholderData: J, + isRefetchError: c && Y, + isStale: BQ(A, t), + refetch: this.refetch, + promise: this.#I, + isEnabled: RS(t.enabled, A) !== !1 + }; + if (this.options.experimental_prefetchInRender) { + const M = G.data !== void 0 + , L = G.status === "error" && !M + , v = y => { + L ? y.reject(G.error) : M && y.resolve(G.data) + } + , at = () => { + const y = this.#I = G.promise = ih(); + v(y) + } + , tt = this.#I; + switch (tt.status) { + case "pending": + A.queryHash === a.queryHash && v(tt); + break; + case "fulfilled": + (L || G.data !== tt.value) && at(); + break; + case "rejected": + (!L || G.error !== tt.reason) && at(); + break + } + } + return G + } + updateResult() { + const A = this.#S + , t = this.createResult(this.#t, this.options); + if (this.#i = this.#t.state, + this.#l = this.options, + this.#i.data !== void 0 && (this.#m = this.#t), + Qp(t, A)) + return; + this.#S = t; + const a = () => { + if (!A) + return !0; + const {notifyOnChangeProps: S} = this.options + , l = typeof S == "function" ? S() : S; + if (l === "all" || !l && !this.#C.size) + return !0; + const s = new Set(l ?? this.#C); + return this.options.throwOnError && s.add("error"), + Object.keys(this.#S).some(E => { + const k = E; + return this.#S[k] !== A[k] && s.has(k) + } + ) + } + ; + this.#Z({ + listeners: a() + }) + } + #U() { + const A = this.#A.getQueryCache().build(this.#A, this.options); + if (A === this.#t) + return; + const t = this.#t; + this.#t = A, + this.#a = A.state, + this.hasListeners() && (t?.removeObserver(this), + A.addObserver(this)) + } + onQueryUpdate() { + this.updateResult(), + this.hasListeners() && this.#h() + } + #Z(A) { + FA.batch( () => { + A.listeners && this.listeners.forEach(t => { + t(this.#S) + } + ), + this.#A.getQueryCache().notify({ + query: this.#t, + type: "observerResultsUpdated" + }) + } + ) + } +} +; +function sx(A, t) { + return RS(t.enabled, A) !== !1 && A.state.data === void 0 && !(A.state.status === "error" && RS(t.retryOnMount, A) === !1) +} +function MW(A, t) { + return sx(A, t) || A.state.data !== void 0 && Ih(A, t, t.refetchOnMount) +} +function Ih(A, t, a) { + if (RS(t.enabled, A) !== !1 && ks(t.staleTime, A) !== "static") { + const S = typeof a == "function" ? a(A) : a; + return S === "always" || S !== !1 && BQ(A, t) + } + return !1 +} +function BW(A, t, a, S) { + return (A !== t || RS(S.enabled, A) === !1) && (!a.suspense || A.state.status !== "error") && BQ(A, a) +} +function BQ(A, t) { + return RS(t.enabled, A) !== !1 && A.isStaleByTime(ks(t.staleTime, A)) +} +function Ix(A, t) { + return !Qp(A.getCurrentResult(), t) +} +var JY = class extends vp { + constructor(A, t) { + super(A, t) + } + bindMethods() { + super.bindMethods(), + this.fetchNextPage = this.fetchNextPage.bind(this), + this.fetchPreviousPage = this.fetchPreviousPage.bind(this) + } + setOptions(A) { + A._type = "infinite", + super.setOptions(A) + } + getOptimisticResult(A) { + return A._type = "infinite", + super.getOptimisticResult(A) + } + fetchNextPage(A) { + return this.fetch({ + ...A, + meta: { + fetchMore: { + direction: "forward" + } + } + }) + } + fetchPreviousPage(A) { + return this.fetch({ + ...A, + meta: { + fetchMore: { + direction: "backward" + } + } + }) + } + createResult(A, t) { + const {state: a} = A + , S = super.createResult(A, t) + , {isFetching: l, isRefetching: s, isError: E, isRefetchError: k} = S + , p = a.fetchMeta?.fetchMore?.direction + , m = E && p === "forward" + , n = l && p === "forward" + , J = E && p === "backward" + , b = l && p === "backward"; + return { + ...S, + fetchNextPage: this.fetchNextPage, + fetchPreviousPage: this.fetchPreviousPage, + hasNextPage: Sx(t, a.data), + hasPreviousPage: ix(t, a.data), + isFetchNextPageError: m, + isFetchingNextPage: n, + isFetchPreviousPageError: J, + isFetchingPreviousPage: b, + isRefetchError: k && !m && !J, + isRefetching: s && !n && !b + } + } +} + , Ex = class extends pY { + #A; + #t; + #a; + #S; + constructor(A) { + super(), + this.#A = A.client, + this.mutationId = A.mutationId, + this.#a = A.mutationCache, + this.#t = [], + this.state = A.state || CY(), + this.setOptions(A.options), + this.scheduleGc() + } + setOptions(A) { + this.options = A, + this.updateGcTime(this.options.gcTime) + } + get meta() { + return this.options.meta + } + addObserver(A) { + this.#t.includes(A) || (this.#t.push(A), + this.clearGcTimeout(), + this.#a.notify({ + type: "observerAdded", + mutation: this, + observer: A + })) + } + removeObserver(A) { + this.#t = this.#t.filter(t => t !== A), + this.scheduleGc(), + this.#a.notify({ + type: "observerRemoved", + mutation: this, + observer: A + }) + } + optionalRemove() { + this.#t.length || (this.state.status === "pending" ? this.scheduleGc() : this.#a.remove(this)) + } + continue() { + return this.#S?.continue() ?? this.execute(this.state.variables) + } + async execute(A) { + const t = () => { + this.#i({ + type: "continue" + }) + } + , a = { + client: this.#A, + meta: this.options.meta, + mutationKey: this.options.mutationKey + }; + this.#S = kY({ + fn: () => this.options.mutationFn ? this.options.mutationFn(A, a) : Promise.reject(new Error("No mutationFn found")), + onFail: (s, E) => { + this.#i({ + type: "failed", + failureCount: s, + error: E + }) + } + , + onPause: () => { + this.#i({ + type: "pause" + }) + } + , + onContinue: t, + retry: this.options.retry ?? 0, + retryDelay: this.options.retryDelay, + networkMode: this.options.networkMode, + canRun: () => this.#a.canRun(this) + }); + const S = this.state.status === "pending" + , l = !this.#S.canStart(); + try { + if (S) + t(); + else { + this.#i({ + type: "pending", + variables: A, + isPaused: l + }), + this.#a.config.onMutate && await this.#a.config.onMutate(A, this, a); + const E = await this.options.onMutate?.(A, a); + E !== this.state.context && this.#i({ + type: "pending", + context: E, + variables: A, + isPaused: l + }) + } + const s = await this.#S.start(); + return await this.#a.config.onSuccess?.(s, A, this.state.context, this, a), + await this.options.onSuccess?.(s, A, this.state.context, a), + await this.#a.config.onSettled?.(s, null, this.state.variables, this.state.context, this, a), + await this.options.onSettled?.(s, null, A, this.state.context, a), + this.#i({ + type: "success", + data: s + }), + s + } catch (s) { + try { + await this.#a.config.onError?.(s, A, this.state.context, this, a) + } catch (E) { + Promise.reject(E) + } + try { + await this.options.onError?.(s, A, this.state.context, a) + } catch (E) { + Promise.reject(E) + } + try { + await this.#a.config.onSettled?.(void 0, s, this.state.variables, this.state.context, this, a) + } catch (E) { + Promise.reject(E) + } + try { + await this.options.onSettled?.(void 0, s, A, this.state.context, a) + } catch (E) { + Promise.reject(E) + } + throw this.#i({ + type: "error", + error: s + }), + s + } finally { + this.#a.runNext(this) + } + } + #i(A) { + const t = a => { + switch (A.type) { + case "failed": + return { + ...a, + failureCount: A.failureCount, + failureReason: A.error + }; + case "pause": + return { + ...a, + isPaused: !0 + }; + case "continue": + return { + ...a, + isPaused: !1 + }; + case "pending": + return { + ...a, + context: A.context, + data: void 0, + failureCount: 0, + failureReason: null, + error: null, + isPaused: A.isPaused, + status: "pending", + variables: A.variables, + submittedAt: Date.now() + }; + case "success": + return { + ...a, + data: A.data, + failureCount: 0, + failureReason: null, + error: null, + status: "success", + isPaused: !1 + }; + case "error": + return { + ...a, + data: void 0, + error: A.error, + failureCount: a.failureCount + 1, + failureReason: A.error, + isPaused: !1, + status: "error" + } + } + } + ; + this.state = t(this.state), + FA.batch( () => { + this.#t.forEach(a => { + a.onMutationUpdate(A) + } + ), + this.#a.notify({ + mutation: this, + type: "updated", + action: A + }) + } + ) + } +} +; +function CY() { + return { + context: void 0, + data: void 0, + error: null, + failureCount: 0, + failureReason: null, + isPaused: !1, + status: "idle", + variables: void 0, + submittedAt: 0 + } +} +var ex = class extends FI { + constructor(A={}) { + super(), + this.config = A, + this.#A = new Set, + this.#t = new Map, + this.#a = 0 + } + #A; + #t; + #a; + build(A, t, a) { + const S = new Ex({ + client: A, + mutationCache: this, + mutationId: ++this.#a, + options: A.defaultMutationOptions(t), + state: a + }); + return this.add(S), + S + } + add(A) { + this.#A.add(A); + const t = Gm(A); + if (typeof t == "string") { + const a = this.#t.get(t); + a ? a.push(A) : this.#t.set(t, [A]) + } + this.notify({ + type: "added", + mutation: A + }) + } + remove(A) { + if (this.#A.delete(A)) { + const t = Gm(A); + if (typeof t == "string") { + const a = this.#t.get(t); + if (a) + if (a.length > 1) { + const S = a.indexOf(A); + S !== -1 && a.splice(S, 1) + } else + a[0] === A && this.#t.delete(t) + } + } + this.notify({ + type: "removed", + mutation: A + }) + } + canRun(A) { + const t = Gm(A); + if (typeof t == "string") { + const S = this.#t.get(t)?.find(l => l.state.status === "pending"); + return !S || S === A + } else + return !0 + } + runNext(A) { + const t = Gm(A); + return typeof t == "string" ? this.#t.get(t)?.find(S => S !== A && S.state.isPaused)?.continue() ?? Promise.resolve() : Promise.resolve() + } + clear() { + FA.batch( () => { + this.#A.forEach(A => { + this.notify({ + type: "removed", + mutation: A + }) + } + ), + this.#A.clear(), + this.#t.clear() + } + ) + } + getAll() { + return Array.from(this.#A) + } + find(A) { + const t = { + exact: !0, + ...A + }; + return this.getAll().find(a => KW(t, a)) + } + findAll(A={}) { + return this.getAll().filter(t => KW(A, t)) + } + notify(A) { + FA.batch( () => { + this.listeners.forEach(t => { + t(A) + } + ) + } + ) + } + resumePausedMutations() { + const A = this.getAll().filter(t => t.state.isPaused); + return FA.batch( () => Promise.all(A.map(t => t.continue().catch(Ya)))) + } +} +; +function Gm(A) { + return A.options.scope?.id +} +var kx = class extends FI { + #A; + #t = void 0; + #a; + #S; + constructor(t, a) { + super(), + this.#A = t, + this.setOptions(a), + this.bindMethods(), + this.#i() + } + bindMethods() { + this.mutate = this.mutate.bind(this), + this.reset = this.reset.bind(this) + } + setOptions(t) { + const a = this.options; + this.options = this.#A.defaultMutationOptions(t), + Qp(this.options, a) || this.#A.getMutationCache().notify({ + type: "observerOptionsUpdated", + mutation: this.#a, + observer: this + }), + a?.mutationKey && this.options.mutationKey && bs(a.mutationKey) !== bs(this.options.mutationKey) ? this.reset() : this.#a?.state.status === "pending" && this.#a.setOptions(this.options) + } + onUnsubscribe() { + this.hasListeners() || this.#a?.removeObserver(this) + } + onMutationUpdate(t) { + this.#i(), + this.#l(t) + } + getCurrentResult() { + return this.#t + } + reset() { + this.#a?.removeObserver(this), + this.#a = void 0, + this.#i(), + this.#l() + } + mutate(t, a) { + return this.#S = a, + this.#a?.removeObserver(this), + this.#a = this.#A.getMutationCache().build(this.#A, this.options), + this.#a.addObserver(this), + this.#a.execute(t) + } + #i() { + const t = this.#a?.state ?? CY(); + this.#t = { + ...t, + isPending: t.status === "pending", + isSuccess: t.status === "success", + isError: t.status === "error", + isIdle: t.status === "idle", + mutate: this.mutate, + reset: this.reset + } + } + #l(t) { + FA.batch( () => { + if (this.#S && this.hasListeners()) { + const a = this.#t.variables + , S = this.#t.context + , l = { + client: this.#A, + meta: this.options.meta, + mutationKey: this.options.mutationKey + }; + if (t?.type === "success") { + try { + this.#S.onSuccess?.(t.data, a, S, l) + } catch (s) { + Promise.reject(s) + } + try { + this.#S.onSettled?.(t.data, null, a, S, l) + } catch (s) { + Promise.reject(s) + } + } else if (t?.type === "error") { + try { + this.#S.onError?.(t.error, a, S, l) + } catch (s) { + Promise.reject(s) + } + try { + this.#S.onSettled?.(void 0, t.error, a, S, l) + } catch (s) { + Promise.reject(s) + } + } + } + this.listeners.forEach(a => { + a(this.#t) + } + ) + } + ) + } +} +; +function TW(A, t) { + const a = new Set(t); + return A.filter(S => !a.has(S)) +} +function px(A, t, a) { + const S = A.slice(0); + return S[t] = a, + S +} +var rx = class extends FI { + #A; + #t; + #a; + #S; + #i; + #l; + #I; + #s; + #k; + #E = []; + constructor(A, t, a) { + super(), + this.#A = A, + this.#S = a, + this.#a = [], + this.#i = [], + this.#t = [], + this.setQueries(t) + } + onSubscribe() { + this.listeners.size === 1 && this.#i.forEach(A => { + A.subscribe(t => { + this.#C(A, t) + } + ) + } + ) + } + onUnsubscribe() { + this.listeners.size || this.destroy() + } + destroy() { + this.listeners = new Set, + this.#i.forEach(A => { + A.destroy() + } + ) + } + setQueries(A, t) { + this.#a = A, + this.#S = t, + FA.batch( () => { + const a = this.#i + , S = this.#e(this.#a); + S.forEach(n => n.observer.setOptions(n.defaultedQueryOptions)); + const l = S.map(n => n.observer) + , s = l.map(n => n.getCurrentResult()) + , E = a.length !== l.length + , k = l.some( (n, J) => n !== a[J]) + , p = E || k + , m = p ? !0 : s.some( (n, J) => { + const b = this.#t[J]; + return !b || !Qp(n, b) + } + ); + !p && !m || (p && (this.#E = S, + this.#i = l), + this.#t = s, + this.hasListeners() && (p && (TW(a, l).forEach(n => { + n.destroy() + } + ), + TW(l, a).forEach(n => { + n.subscribe(J => { + this.#C(n, J) + } + ) + } + )), + this.#r())) + } + ) + } + getCurrentResult() { + return this.#t + } + getQueries() { + return this.#i.map(A => A.getCurrentQuery()) + } + getObservers() { + return this.#i + } + getOptimisticResult(A, t) { + const a = this.#e(A) + , S = a.map(s => s.observer.getOptimisticResult(s.defaultedQueryOptions)) + , l = a.map(s => s.defaultedQueryOptions.queryHash); + return [S, s => this.#p(s ?? S, t, l), () => this.#m(S, a)] + } + #m(A, t) { + return t.map( (a, S) => { + const l = A[S]; + return a.defaultedQueryOptions.notifyOnChangeProps ? l : a.observer.trackResult(l, s => { + t.forEach(E => { + E.observer.trackProp(s) + } + ) + } + ) + } + ) + } + #p(A, t, a) { + if (t) { + const S = this.#k + , l = a !== void 0 && S !== void 0 && (S.length !== a.length || a.some( (s, E) => s !== S[E])); + return (!this.#l || this.#t !== this.#s || l || t !== this.#I) && (this.#I = t, + this.#s = this.#t, + a !== void 0 && (this.#k = a), + this.#l = uQ(this.#l, t(A))), + this.#l + } + return A + } + #J() { + return this.#S?.combine !== void 0 && this.#i.some( (A, t) => A.options.suspense && this.#t[t]?.data === void 0) + } + #e(A) { + const t = new Map; + this.#i.forEach(S => { + const l = S.options.queryHash; + if (!l) + return; + const s = t.get(l); + s ? s.push(S) : t.set(l, [S]) + } + ); + const a = []; + return A.forEach(S => { + const l = this.#A.defaultQueryOptions(S) + , E = t.get(l.queryHash)?.shift() ?? new vp(this.#A,l); + a.push({ + defaultedQueryOptions: l, + observer: E + }) + } + ), + a + } + #C(A, t) { + const a = this.#i.indexOf(A); + a !== -1 && (this.#t = px(this.#t, a, t), + this.#r()) + } + #r() { + if (this.hasListeners()) { + const A = this.#m(this.#t, this.#E) + , t = this.#J() + , a = this.#l + , S = t ? a : this.#p(A, this.#S?.combine); + (t || a !== S) && FA.batch( () => { + this.listeners.forEach(l => { + l(this.#t) + } + ) + } + ) + } + } +} + , mx = class extends FI { + constructor(A={}) { + super(), + this.config = A, + this.#A = new Map + } + #A; + build(A, t, a) { + const S = t.queryKey + , l = t.queryHash ?? NQ(S, t); + let s = this.get(l); + return s || (s = new lx({ + client: A, + queryKey: S, + queryHash: l, + options: A.defaultQueryOptions(t), + state: a, + defaultOptions: A.getQueryDefaults(S) + }), + this.add(s)), + s + } + add(A) { + this.#A.has(A.queryHash) || (this.#A.set(A.queryHash, A), + this.notify({ + type: "added", + query: A + })) + } + remove(A) { + const t = this.#A.get(A.queryHash); + t && (A.destroy(), + t === A && this.#A.delete(A.queryHash), + this.notify({ + type: "removed", + query: A + })) + } + clear() { + FA.batch( () => { + this.getAll().forEach(A => { + this.remove(A) + } + ) + } + ) + } + get(A) { + return this.#A.get(A) + } + getAll() { + return [...this.#A.values()] + } + find(A) { + const t = { + exact: !0, + ...A + }; + return this.getAll().find(a => cW(t, a)) + } + findAll(A={}) { + const t = this.getAll(); + return Object.keys(A).length > 0 ? t.filter(a => cW(A, a)) : t + } + notify(A) { + FA.batch( () => { + this.listeners.forEach(t => { + t(A) + } + ) + } + ) + } + onFocus() { + FA.batch( () => { + this.getAll().forEach(A => { + A.onFocus() + } + ) + } + ) + } + onOnline() { + FA.batch( () => { + this.getAll().forEach(A => { + A.onOnline() + } + ) + } + ) + } +} + , Jx = class { + #A; + #t; + #a; + #S; + #i; + #l; + #I; + #s; + constructor(A={}) { + this.#A = A.queryCache || new mx, + this.#t = A.mutationCache || new ex, + this.#a = A.defaultOptions || {}, + this.#S = new Map, + this.#i = new Map, + this.#l = 0 + } + mount() { + this.#l++, + this.#l === 1 && (this.#I = YQ.subscribe(async A => { + A && (await this.resumePausedMutations(), + this.#A.onFocus()) + } + ), + this.#s = TJ.subscribe(async A => { + A && (await this.resumePausedMutations(), + this.#A.onOnline()) + } + )) + } + unmount() { + this.#l--, + this.#l === 0 && (this.#I?.(), + this.#I = void 0, + this.#s?.(), + this.#s = void 0) + } + isFetching(A) { + return this.#A.findAll({ + ...A, + fetchStatus: "fetching" + }).length + } + isMutating(A) { + return this.#t.findAll({ + ...A, + status: "pending" + }).length + } + getQueryData(A) { + const t = this.defaultQueryOptions({ + queryKey: A + }); + return this.#A.get(t.queryHash)?.state.data + } + ensureQueryData(A) { + const t = this.defaultQueryOptions(A) + , a = this.#A.build(this, t) + , S = a.state.data; + return S === void 0 ? this.fetchQuery(A) : (A.revalidateIfStale && a.isStaleByTime(ks(t.staleTime, a)) && this.prefetchQuery(t), + Promise.resolve(S)) + } + getQueriesData(A) { + return this.#A.findAll(A).map( ({queryKey: t, state: a}) => { + const S = a.data; + return [t, S] + } + ) + } + setQueryData(A, t, a) { + const S = this.defaultQueryOptions({ + queryKey: A + }) + , s = this.#A.get(S.queryHash)?.state.data + , E = DF(t, s); + if (E !== void 0) + return this.#A.build(this, S).setData(E, { + ...a, + manual: !0 + }) + } + setQueriesData(A, t, a) { + return FA.batch( () => this.#A.findAll(A).map( ({queryKey: S}) => [S, this.setQueryData(S, t, a)])) + } + getQueryState(A) { + const t = this.defaultQueryOptions({ + queryKey: A + }); + return this.#A.get(t.queryHash)?.state + } + removeQueries(A) { + const t = this.#A; + FA.batch( () => { + t.findAll(A).forEach(a => { + t.remove(a) + } + ) + } + ) + } + resetQueries(A, t) { + const a = this.#A; + return FA.batch( () => (a.findAll(A).forEach(S => { + S.reset() + } + ), + this.refetchQueries({ + type: "active", + ...A + }, t))) + } + cancelQueries(A, t={}) { + const a = { + revert: !0, + ...t + } + , S = FA.batch( () => this.#A.findAll(A).map(l => l.cancel(a))); + return Promise.all(S).then(Ya).catch(Ya) + } + invalidateQueries(A, t={}) { + return FA.batch( () => (this.#A.findAll(A).forEach(a => { + a.invalidate() + } + ), + A?.refetchType === "none" ? Promise.resolve() : this.refetchQueries({ + ...A, + type: A?.refetchType ?? A?.type ?? "active" + }, t))) + } + refetchQueries(A, t={}) { + const a = { + ...t, + cancelRefetch: t.cancelRefetch ?? !0 + } + , S = FA.batch( () => this.#A.findAll(A).filter(l => !l.isDisabled() && !l.isStatic()).map(l => { + let s = l.fetch(void 0, a); + return a.throwOnError || (s = s.catch(Ya)), + l.state.fetchStatus === "paused" ? Promise.resolve() : s + } + )); + return Promise.all(S).then(Ya) + } + fetchQuery(A) { + const t = this.defaultQueryOptions(A); + t.retry === void 0 && (t.retry = !1); + const a = this.#A.build(this, t); + return a.isStaleByTime(ks(t.staleTime, a)) ? a.fetch(t) : Promise.resolve(a.state.data) + } + prefetchQuery(A) { + return this.fetchQuery(A).then(Ya).catch(Ya) + } + fetchInfiniteQuery(A) { + return A._type = "infinite", + this.fetchQuery(A) + } + prefetchInfiniteQuery(A) { + return this.fetchInfiniteQuery(A).then(Ya).catch(Ya) + } + ensureInfiniteQueryData(A) { + return A._type = "infinite", + this.ensureQueryData(A) + } + resumePausedMutations() { + return TJ.isOnline() ? this.#t.resumePausedMutations() : Promise.resolve() + } + getQueryCache() { + return this.#A + } + getMutationCache() { + return this.#t + } + getDefaultOptions() { + return this.#a + } + setDefaultOptions(A) { + this.#a = A + } + setQueryDefaults(A, t) { + this.#S.set(bs(A), { + queryKey: A, + defaultOptions: t + }) + } + getQueryDefaults(A) { + const t = [...this.#S.values()] + , a = {}; + return t.forEach(S => { + hp(A, S.queryKey) && Object.assign(a, S.defaultOptions) + } + ), + a + } + setMutationDefaults(A, t) { + this.#i.set(bs(A), { + mutationKey: A, + defaultOptions: t + }) + } + getMutationDefaults(A) { + const t = [...this.#i.values()] + , a = {}; + return t.forEach(S => { + hp(A, S.mutationKey) && Object.assign(a, S.defaultOptions) + } + ), + a + } + defaultQueryOptions(A) { + if (A._defaulted) + return A; + const t = { + ...this.#a.queries, + ...this.getQueryDefaults(A.queryKey), + ...A, + _defaulted: !0 + }; + return t.queryHash || (t.queryHash = NQ(t.queryKey, t)), + t.refetchOnReconnect === void 0 && (t.refetchOnReconnect = t.networkMode !== "always"), + t.throwOnError === void 0 && (t.throwOnError = !!t.suspense), + !t.networkMode && t.persister && (t.networkMode = "offlineFirst"), + t.queryFn === ZS && (t.enabled = !1), + t + } + defaultMutationOptions(A) { + return A?._defaulted ? A : { + ...this.#a.mutations, + ...A?.mutationKey && this.getMutationDefaults(A.mutationKey), + ...A, + _defaulted: !0 + } + } + clear() { + this.#A.clear(), + this.#t.clear() + } +} + , zb = { + exports: {} +} + , Bt = {}; +/** + * @license React + * react.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var jW; +function Cx() { + if (jW) + return Bt; + jW = 1; + var A = Symbol.for("react.transitional.element") + , t = Symbol.for("react.portal") + , a = Symbol.for("react.fragment") + , S = Symbol.for("react.strict_mode") + , l = Symbol.for("react.profiler") + , s = Symbol.for("react.consumer") + , E = Symbol.for("react.context") + , k = Symbol.for("react.forward_ref") + , p = Symbol.for("react.suspense") + , m = Symbol.for("react.memo") + , n = Symbol.for("react.lazy") + , J = Symbol.for("react.activity") + , b = Symbol.iterator; + function h(j) { + return j === null || typeof j != "object" ? null : (j = b && j[b] || j["@@iterator"], + typeof j == "function" ? j : null) + } + var U = { + isMounted: function() { + return !1 + }, + enqueueForceUpdate: function() {}, + enqueueReplaceState: function() {}, + enqueueSetState: function() {} + } + , R = Object.assign + , Z = {}; + function g(j, H, V) { + this.props = j, + this.context = H, + this.refs = Z, + this.updater = V || U + } + g.prototype.isReactComponent = {}, + g.prototype.setState = function(j, H) { + if (typeof j != "object" && typeof j != "function" && j != 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, j, H, "setState") + } + , + g.prototype.forceUpdate = function(j) { + this.updater.enqueueForceUpdate(this, j, "forceUpdate") + } + ; + function W() {} + W.prototype = g.prototype; + function c(j, H, V) { + this.props = j, + this.context = H, + this.refs = Z, + this.updater = V || U + } + var u = c.prototype = new W; + u.constructor = c, + R(u, g.prototype), + u.isPureReactComponent = !0; + var Y = Array.isArray; + function B() {} + var G = { + H: null, + A: null, + T: null, + S: null + } + , M = Object.prototype.hasOwnProperty; + function L(j, H, V) { + var P = V.ref; + return { + $$typeof: A, + type: j, + key: H, + ref: P !== void 0 ? P : null, + props: V + } + } + function v(j, H) { + return L(j.type, H, j.props) + } + function at(j) { + return typeof j == "object" && j !== null && j.$$typeof === A + } + function tt(j) { + var H = { + "=": "=0", + ":": "=2" + }; + return "$" + j.replace(/[=:]/g, function(V) { + return H[V] + }) + } + var y = /\/+/g; + function St(j, H) { + return typeof j == "object" && j !== null && j.key != null ? tt("" + j.key) : H.toString(36) + } + function It(j) { + switch (j.status) { + case "fulfilled": + return j.value; + case "rejected": + throw j.reason; + default: + switch (typeof j.status == "string" ? j.then(B, B) : (j.status = "pending", + j.then(function(H) { + j.status === "pending" && (j.status = "fulfilled", + j.value = H) + }, function(H) { + j.status === "pending" && (j.status = "rejected", + j.reason = H) + })), + j.status) { + case "fulfilled": + return j.value; + case "rejected": + throw j.reason + } + } + throw j + } + function T(j, H, V, P, et) { + var Ct = typeof j; + (Ct === "undefined" || Ct === "boolean") && (j = null); + var lt = !1; + if (j === null) + lt = !0; + else + switch (Ct) { + case "bigint": + case "string": + case "number": + lt = !0; + break; + case "object": + switch (j.$$typeof) { + case A: + case t: + lt = !0; + break; + case n: + return lt = j._init, + T(lt(j._payload), H, V, P, et) + } + } + if (lt) + return et = et(j), + lt = P === "" ? "." + St(j, 0) : P, + Y(et) ? (V = "", + lt != null && (V = lt.replace(y, "$&/") + "/"), + T(et, H, V, "", function(qt) { + return qt + })) : et != null && (at(et) && (et = v(et, V + (et.key == null || j && j.key === et.key ? "" : ("" + et.key).replace(y, "$&/") + "/") + lt)), + H.push(et)), + 1; + lt = 0; + var nt = P === "" ? "." : P + ":"; + if (Y(j)) + for (var Gt = 0; Gt < j.length; Gt++) + P = j[Gt], + Ct = nt + St(P, Gt), + lt += T(P, H, V, Ct, et); + else if (Gt = h(j), + typeof Gt == "function") + for (j = Gt.call(j), + Gt = 0; !(P = j.next()).done; ) + P = P.value, + Ct = nt + St(P, Gt++), + lt += T(P, H, V, Ct, et); + else if (Ct === "object") { + if (typeof j.then == "function") + return T(It(j), H, V, P, et); + throw H = String(j), + Error("Objects are not valid as a React child (found: " + (H === "[object Object]" ? "object with keys {" + Object.keys(j).join(", ") + "}" : H) + "). If you meant to render a collection of children, use an array instead.") + } + return lt + } + function z(j, H, V) { + if (j == null) + return j; + var P = [] + , et = 0; + return T(j, P, "", "", function(Ct) { + return H.call(V, Ct, et++) + }), + P + } + function q(j) { + if (j._status === -1) { + var H = j._result; + H = H(), + H.then(function(V) { + (j._status === 0 || j._status === -1) && (j._status = 1, + j._result = V) + }, function(V) { + (j._status === 0 || j._status === -1) && (j._status = 2, + j._result = V) + }), + j._status === -1 && (j._status = 0, + j._result = H) + } + if (j._status === 1) + return j._result.default; + throw j._result + } + var _ = typeof reportError == "function" ? reportError : function(j) { + if (typeof window == "object" && typeof window.ErrorEvent == "function") { + var H = new window.ErrorEvent("error",{ + bubbles: !0, + cancelable: !0, + message: typeof j == "object" && j !== null && typeof j.message == "string" ? String(j.message) : String(j), + error: j + }); + if (!window.dispatchEvent(H)) + return + } else if (typeof process == "object" && typeof process.emit == "function") { + process.emit("uncaughtException", j); + return + } + console.error(j) + } + , rt = { + map: z, + forEach: function(j, H, V) { + z(j, function() { + H.apply(this, arguments) + }, V) + }, + count: function(j) { + var H = 0; + return z(j, function() { + H++ + }), + H + }, + toArray: function(j) { + return z(j, function(H) { + return H + }) || [] + }, + only: function(j) { + if (!at(j)) + throw Error("React.Children.only expected to receive a single React element child."); + return j + } + }; + return Bt.Activity = J, + Bt.Children = rt, + Bt.Component = g, + Bt.Fragment = a, + Bt.Profiler = l, + Bt.PureComponent = c, + Bt.StrictMode = S, + Bt.Suspense = p, + Bt.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = G, + Bt.__COMPILER_RUNTIME = { + __proto__: null, + c: function(j) { + return G.H.useMemoCache(j) + } + }, + Bt.cache = function(j) { + return function() { + return j.apply(null, arguments) + } + } + , + Bt.cacheSignal = function() { + return null + } + , + Bt.cloneElement = function(j, H, V) { + if (j == null) + throw Error("The argument must be a React element, but you passed " + j + "."); + var P = R({}, j.props) + , et = j.key; + if (H != null) + for (Ct in H.key !== void 0 && (et = "" + H.key), + H) + !M.call(H, Ct) || Ct === "key" || Ct === "__self" || Ct === "__source" || Ct === "ref" && H.ref === void 0 || (P[Ct] = H[Ct]); + var Ct = arguments.length - 2; + if (Ct === 1) + P.children = V; + else if (1 < Ct) { + for (var lt = Array(Ct), nt = 0; nt < Ct; nt++) + lt[nt] = arguments[nt + 2]; + P.children = lt + } + return L(j.type, et, P) + } + , + Bt.createContext = function(j) { + return j = { + $$typeof: E, + _currentValue: j, + _currentValue2: j, + _threadCount: 0, + Provider: null, + Consumer: null + }, + j.Provider = j, + j.Consumer = { + $$typeof: s, + _context: j + }, + j + } + , + Bt.createElement = function(j, H, V) { + var P, et = {}, Ct = null; + if (H != null) + for (P in H.key !== void 0 && (Ct = "" + H.key), + H) + M.call(H, P) && P !== "key" && P !== "__self" && P !== "__source" && (et[P] = H[P]); + var lt = arguments.length - 2; + if (lt === 1) + et.children = V; + else if (1 < lt) { + for (var nt = Array(lt), Gt = 0; Gt < lt; Gt++) + nt[Gt] = arguments[Gt + 2]; + et.children = nt + } + if (j && j.defaultProps) + for (P in lt = j.defaultProps, + lt) + et[P] === void 0 && (et[P] = lt[P]); + return L(j, Ct, et) + } + , + Bt.createRef = function() { + return { + current: null + } + } + , + Bt.forwardRef = function(j) { + return { + $$typeof: k, + render: j + } + } + , + Bt.isValidElement = at, + Bt.lazy = function(j) { + return { + $$typeof: n, + _payload: { + _status: -1, + _result: j + }, + _init: q + } + } + , + Bt.memo = function(j, H) { + return { + $$typeof: m, + type: j, + compare: H === void 0 ? null : H + } + } + , + Bt.startTransition = function(j) { + var H = G.T + , V = {}; + G.T = V; + try { + var P = j() + , et = G.S; + et !== null && et(V, P), + typeof P == "object" && P !== null && typeof P.then == "function" && P.then(B, _) + } catch (Ct) { + _(Ct) + } finally { + H !== null && V.types !== null && (H.types = V.types), + G.T = H + } + } + , + Bt.unstable_useCacheRefresh = function() { + return G.H.useCacheRefresh() + } + , + Bt.use = function(j) { + return G.H.use(j) + } + , + Bt.useActionState = function(j, H, V) { + return G.H.useActionState(j, H, V) + } + , + Bt.useCallback = function(j, H) { + return G.H.useCallback(j, H) + } + , + Bt.useContext = function(j) { + return G.H.useContext(j) + } + , + Bt.useDebugValue = function() {} + , + Bt.useDeferredValue = function(j, H) { + return G.H.useDeferredValue(j, H) + } + , + Bt.useEffect = function(j, H) { + return G.H.useEffect(j, H) + } + , + Bt.useEffectEvent = function(j) { + return G.H.useEffectEvent(j) + } + , + Bt.useId = function() { + return G.H.useId() + } + , + Bt.useImperativeHandle = function(j, H, V) { + return G.H.useImperativeHandle(j, H, V) + } + , + Bt.useInsertionEffect = function(j, H) { + return G.H.useInsertionEffect(j, H) + } + , + Bt.useLayoutEffect = function(j, H) { + return G.H.useLayoutEffect(j, H) + } + , + Bt.useMemo = function(j, H) { + return G.H.useMemo(j, H) + } + , + Bt.useOptimistic = function(j, H) { + return G.H.useOptimistic(j, H) + } + , + Bt.useReducer = function(j, H, V) { + return G.H.useReducer(j, H, V) + } + , + Bt.useRef = function(j) { + return G.H.useRef(j) + } + , + Bt.useState = function(j) { + return G.H.useState(j) + } + , + Bt.useSyncExternalStore = function(j, H, V) { + return G.H.useSyncExternalStore(j, H, V) + } + , + Bt.useTransition = function() { + return G.H.useTransition() + } + , + Bt.version = "19.2.1", + Bt +} +var qW; +function Xp() { + return qW || (qW = 1, + zb.exports = Cx()), + zb.exports +} +var d = Xp(); +const O = sY(d) + , TC = FF({ + __proto__: null, + default: O +}, [d]); +var nY = d.createContext(void 0) + , Hp = A => { + const t = d.useContext(nY); + if (A) + return A; + if (!t) + throw new Error("No QueryClient set, use QueryClientProvider to set one"); + return t +} + , nx = ({client: A, children: t}) => (d.useEffect( () => (A.mount(), +() => { + A.unmount() +} +), [A]), +i.jsx(nY.Provider, { + value: A, + children: t +})) + , bY = d.createContext(!1) + , oY = () => d.useContext(bY); +bY.Provider; +function bx() { + let A = !1; + return { + clearReset: () => { + A = !1 + } + , + reset: () => { + A = !0 + } + , + isReset: () => A + } +} +var ox = d.createContext(bx()) + , hY = () => d.useContext(ox) + , QY = (A, t, a) => { + const S = a?.state.error && typeof A.throwOnError == "function" ? MQ(A.throwOnError, [a.state.error, a]) : A.throwOnError; + (A.suspense || A.experimental_prefetchInRender || S) && (t.isReset() || (A.retryOnMount = !1)) +} + , RY = A => { + d.useEffect( () => { + A.clearReset() + } + , [A]) +} + , UY = ({result: A, errorResetBoundary: t, throwOnError: a, query: S, suspense: l}) => A.isError && !t.isReset() && !A.isFetching && S && (l && A.data === void 0 || MQ(a, [A.error, S])) + , TQ = (A, t) => t.state.data === void 0 + , ZY = A => { + if (A.suspense) { + const a = l => l === "static" ? l : Math.max(l ?? 1e3, 1e3) + , S = A.staleTime; + A.staleTime = typeof S == "function" ? (...l) => a(S(...l)) : a(S), + typeof A.gcTime == "number" && (A.gcTime = Math.max(A.gcTime, 1e3)) + } +} + , hx = (A, t) => A.isLoading && A.isFetching && !t + , Eh = (A, t) => A?.suspense && t.isPending + , eh = (A, t, a) => t.fetchOptimistic(A).catch( () => { + a.clearReset() +} +); +function dY({queries: A, ...t}, a) { + const S = Hp(a) + , l = oY() + , s = hY() + , E = d.useMemo( () => A.map(R => { + const Z = S.defaultQueryOptions(R); + return Z._optimisticResults = l ? "isRestoring" : "optimistic", + Z + } + ), [A, S, l]); + E.forEach(R => { + ZY(R); + const Z = S.getQueryCache().get(R.queryHash); + QY(R, s, Z) + } + ), + RY(s); + const [k] = d.useState( () => new rx(S,E,t)) + , [p,m,n] = k.getOptimisticResult(E, t.combine) + , J = !l && t.subscribed !== !1; + d.useSyncExternalStore(d.useCallback(R => J ? k.subscribe(FA.batchCalls(R)) : Ya, [k, J]), () => k.getCurrentResult(), () => k.getCurrentResult()), + d.useEffect( () => { + k.setQueries(E, t) + } + , [E, t, k]); + const h = p.some( (R, Z) => Eh(E[Z], R)) ? p.flatMap( (R, Z) => { + const g = E[Z]; + if (g && Eh(g, R)) { + const W = new vp(S,g); + return eh(g, W, s) + } + return [] + } + ) : []; + if (h.length > 0) + throw Promise.all(h); + const U = p.find( (R, Z) => { + const g = E[Z]; + return g && UY({ + result: R, + errorResetBoundary: s, + throwOnError: g.throwOnError, + query: S.getQueryCache().get(g.queryHash), + suspense: g.suspense + }) + } + ); + if (U?.error) + throw U.error; + return m(n()) +} +function jC(A, t, a) { + const S = oY() + , l = hY() + , s = Hp(a) + , E = s.defaultQueryOptions(A); + s.getDefaultOptions().queries?._experimental_beforeQuery?.(E); + const k = s.getQueryCache().get(E.queryHash); + E._optimisticResults = S ? "isRestoring" : "optimistic", + ZY(E), + QY(E, l, k), + RY(l); + const p = !s.getQueryCache().get(E.queryHash) + , [m] = d.useState( () => new t(s,E)) + , n = m.getOptimisticResult(E) + , J = !S && A.subscribed !== !1; + if (d.useSyncExternalStore(d.useCallback(b => { + const h = J ? m.subscribe(FA.batchCalls(b)) : Ya; + return m.updateResult(), + h + } + , [m, J]), () => m.getCurrentResult(), () => m.getCurrentResult()), + d.useEffect( () => { + m.setOptions(E) + } + , [E, m]), + Eh(E, n)) + throw eh(E, m, l); + if (UY({ + result: n, + errorResetBoundary: l, + throwOnError: E.throwOnError, + query: k, + suspense: E.suspense + })) + throw n.error; + return s.getDefaultOptions().queries?._experimental_afterQuery?.(E, n), + E.experimental_prefetchInRender && !Rp.isServer() && hx(n, S) && (p ? eh(E, m, l) : k?.promise)?.catch(Ya).finally( () => { + m.updateResult() + } + ), + E.notifyOnChangeProps ? n : m.trackResult(n) +} +function Qx(A, t) { + return jC(A, vp, t) +} +function Rx(A, t) { + return jC({ + ...A, + enabled: !0, + suspense: !0, + throwOnError: TQ, + placeholderData: void 0 + }, vp, t) +} +function Ux(A, t) { + return jC({ + ...A, + enabled: !0, + suspense: !0, + throwOnError: TQ + }, JY, t) +} +function Zx(A, t) { + return dY({ + ...A, + queries: A.queries.map(a => ({ + ...a, + suspense: !0, + throwOnError: TQ, + enabled: !0, + placeholderData: void 0 + })) + }, t) +} +function dx(A, t) { + const a = Hp(t); + a.getQueryState(A.queryKey) || a.prefetchQuery(A) +} +function gx(A, t) { + const a = Hp(t); + a.getQueryState(A.queryKey) || a.prefetchInfiniteQuery(A) +} +function Wx(A, t) { + const a = Hp(t) + , [S] = d.useState( () => new kx(a,A)); + d.useEffect( () => { + S.setOptions(A) + } + , [S, A]); + const l = d.useSyncExternalStore(d.useCallback(E => S.subscribe(FA.batchCalls(E)), [S]), () => S.getCurrentResult(), () => S.getCurrentResult()) + , s = d.useCallback( (E, k) => { + S.mutate(E, k).catch(Ya) + } + , [S]); + if (l.error && MQ(S.options.throwOnError, [l.error])) + throw l.error; + return { + ...l, + mutate: s, + mutateAsync: l.mutate + } +} +function cx(A, t) { + return jC(A, JY, t) +} +function dI(A) { + return !!A && !Array.isArray(A) && typeof A == "object" +} +function Kx() { + return Object.create(null) +} +const Gx = typeof Symbol == "function" && !!Symbol.asyncIterator; +function gY(A) { + return Gx && dI(A) && Symbol.asyncIterator in A +} +var Yx = Object.create + , WY = Object.defineProperty + , Nx = Object.getOwnPropertyDescriptor + , cY = Object.getOwnPropertyNames + , ux = Object.getPrototypeOf + , Mx = Object.prototype.hasOwnProperty + , Pp = (A, t) => function() { + return t || (0, + A[cY(A)[0]])((t = { + exports: {} + }).exports, t), + t.exports +} + , Bx = (A, t, a, S) => { + if (t && typeof t == "object" || typeof t == "function") + for (var l = cY(t), s = 0, E = l.length, k; s < E; s++) + k = l[s], + !Mx.call(A, k) && k !== a && WY(A, k, { + get: (p => t[p]).bind(null, k), + enumerable: !(S = Nx(t, k)) || S.enumerable + }); + return A +} + , qC = (A, t, a) => (a = A != null ? Yx(ux(A)) : {}, +Bx(WY(a, "default", { + value: A, + enumerable: !0 +}), A)); +const KY = () => {} + , FW = A => { + Object.freeze && Object.freeze(A) +} +; +function GY(A, t, a) { + var S; + const l = t.join("."); + return (S = a[l]) !== null && S !== void 0 || (a[l] = new Proxy(KY,{ + get(s, E) { + if (!(typeof E != "string" || E === "then")) + return GY(A, [...t, E], a) + }, + apply(s, E, k) { + const p = t[t.length - 1]; + if (p === "valueOf" || p === "toString" || p === "toJSON") + return `tRPC.proxy(${t.slice(0, -1).join(".")})`; + let m = { + args: k, + path: t + }; + return p === "call" ? m = { + args: k.length >= 2 ? [k[1]] : [], + path: t.slice(0, -1) + } : p === "apply" && (m = { + args: k.length >= 2 ? k[1] : [], + path: t.slice(0, -1) + }), + FW(m.args), + FW(m.path), + A(m) + } + })), + a[l] +} +const FC = A => GY(A, [], Kx()) + , jQ = A => new Proxy(KY,{ + get(t, a) { + if (a !== "then") + return A(a) + } +}); +var YY = Pp({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(A, t) { + function a(S) { + "@babel/helpers - typeof"; + return t.exports = a = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(l) { + return typeof l + } + : function(l) { + return l && typeof Symbol == "function" && l.constructor === Symbol && l !== Symbol.prototype ? "symbol" : typeof l + } + , + t.exports.__esModule = !0, + t.exports.default = t.exports, + a(S) + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Tx = Pp({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(A, t) { + var a = YY().default; + function S(l, s) { + if (a(l) != "object" || !l) + return l; + var E = l[Symbol.toPrimitive]; + if (E !== void 0) { + var k = E.call(l, s || "default"); + if (a(k) != "object") + return k; + throw new TypeError("@@toPrimitive must return a primitive value.") + } + return (s === "string" ? String : Number)(l) + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , jx = Pp({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(A, t) { + var a = YY().default + , S = Tx(); + function l(s) { + var E = S(s, "string"); + return a(E) == "symbol" ? E : E + "" + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , NY = Pp({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(A, t) { + var a = jx(); + function S(l, s, E) { + return (s = a(s)) in l ? Object.defineProperty(l, s, { + value: E, + enumerable: !0, + configurable: !0, + writable: !0 + }) : l[s] = E, + l + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , qQ = Pp({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(A, t) { + var a = NY(); + function S(s, E) { + var k = Object.keys(s); + if (Object.getOwnPropertySymbols) { + var p = Object.getOwnPropertySymbols(s); + E && (p = p.filter(function(m) { + return Object.getOwnPropertyDescriptor(s, m).enumerable + })), + k.push.apply(k, p) + } + return k + } + function l(s) { + for (var E = 1; E < arguments.length; E++) { + var k = arguments[E] != null ? arguments[E] : {}; + E % 2 ? S(Object(k), !0).forEach(function(p) { + a(s, p, k[p]) + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(k)) : S(Object(k)).forEach(function(p) { + Object.defineProperty(s, p, Object.getOwnPropertyDescriptor(k, p)) + }) + } + return s + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}); +qC(qQ()); +qC(NY()); +var Ym = qC(qQ()); +function qx(A, t) { + if ("error" in A) { + const S = t.deserialize(A.error); + return { + ok: !1, + error: (0, + Ym.default)((0, + Ym.default)({}, A), {}, { + error: S + }) + } + } + return { + ok: !0, + result: (0, + Ym.default)((0, + Ym.default)({}, A.result), (!A.result.type || A.result.type === "data") && { + type: "data", + data: t.deserialize(A.result.data) + }) + } +} +var Ob = class extends Error { + constructor() { + super("Unable to transform response from server") + } +} +; +function Fx(A, t) { + let a; + try { + a = qx(A, t) + } catch { + throw new Ob + } + if (!a.ok && (!dI(a.error.error) || typeof a.error.error.code != "number")) + throw new Ob; + if (a.ok && !dI(a.result)) + throw new Ob; + return a +} +qC(qQ()); +function xC(A) { + const t = { + subscribe(a) { + let S = null + , l = !1 + , s = !1 + , E = !1; + function k() { + if (S === null) { + E = !0; + return + } + s || (s = !0, + typeof S == "function" ? S() : S && S.unsubscribe()) + } + return S = A({ + next(p) { + var m; + l || (m = a.next) === null || m === void 0 || m.call(a, p) + }, + error(p) { + var m; + l || (l = !0, + (m = a.error) === null || m === void 0 || m.call(a, p), + k()) + }, + complete() { + var p; + l || (l = !0, + (p = a.complete) === null || p === void 0 || p.call(a), + k()) + } + }), + E && k(), + { + unsubscribe: k + } + }, + pipe(...a) { + return a.reduce(xx, t) + } + }; + return t +} +function xx(A, t) { + return t(A) +} +function yx(A) { + const t = new AbortController; + return new Promise( (S, l) => { + let s = !1; + function E() { + s || (s = !0, + k.unsubscribe()) + } + t.signal.addEventListener("abort", () => { + l(t.signal.reason) + } + ); + const k = A.subscribe({ + next(p) { + s = !0, + S(p), + E() + }, + error(p) { + l(p) + }, + complete() { + t.abort(), + E() + } + }) + } + ) +} +var Lx = Object.create + , uY = Object.defineProperty + , wx = Object.getOwnPropertyDescriptor + , MY = Object.getOwnPropertyNames + , zx = Object.getPrototypeOf + , Ox = Object.prototype.hasOwnProperty + , gs = (A, t) => function() { + return t || (0, + A[MY(A)[0]])((t = { + exports: {} + }).exports, t), + t.exports +} + , Vx = (A, t, a, S) => { + if (t && typeof t == "object" || typeof t == "function") + for (var l = MY(t), s = 0, E = l.length, k; s < E; s++) + k = l[s], + !Ox.call(A, k) && k !== a && uY(A, k, { + get: (p => t[p]).bind(null, k), + enumerable: !(S = wx(t, k)) || S.enumerable + }); + return A +} + , xI = (A, t, a) => (a = A != null ? Lx(zx(A)) : {}, +Vx(t || !A || !A.__esModule ? uY(a, "default", { + value: A, + enumerable: !0 +}) : a, A)) + , Dx = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutPropertiesLoose.js"(A, t) { + function a(S, l) { + if (S == null) + return {}; + var s = {}; + for (var E in S) + if ({}.hasOwnProperty.call(S, E)) { + if (l.includes(E)) + continue; + s[E] = S[E] + } + return s + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , fx = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectWithoutProperties.js"(A, t) { + var a = Dx(); + function S(l, s) { + if (l == null) + return {}; + var E, k, p = a(l, s); + if (Object.getOwnPropertySymbols) { + var m = Object.getOwnPropertySymbols(l); + for (k = 0; k < m.length; k++) + E = m[k], + s.includes(E) || {}.propertyIsEnumerable.call(l, E) && (p[E] = l[E]) + } + return p + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , BY = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(A, t) { + function a(S) { + "@babel/helpers - typeof"; + return t.exports = a = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(l) { + return typeof l + } + : function(l) { + return l && typeof Symbol == "function" && l.constructor === Symbol && l !== Symbol.prototype ? "symbol" : typeof l + } + , + t.exports.__esModule = !0, + t.exports.default = t.exports, + a(S) + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , vx = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(A, t) { + var a = BY().default; + function S(l, s) { + if (a(l) != "object" || !l) + return l; + var E = l[Symbol.toPrimitive]; + if (E !== void 0) { + var k = E.call(l, s || "default"); + if (a(k) != "object") + return k; + throw new TypeError("@@toPrimitive must return a primitive value.") + } + return (s === "string" ? String : Number)(l) + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Xx = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(A, t) { + var a = BY().default + , S = vx(); + function l(s) { + var E = S(s, "string"); + return a(E) == "symbol" ? E : E + "" + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Hx = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(A, t) { + var a = Xx(); + function S(l, s, E) { + return (s = a(s)) in l ? Object.defineProperty(l, s, { + value: E, + enumerable: !0, + configurable: !0, + writable: !0 + }) : l[s] = E, + l + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , _p = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(A, t) { + var a = Hx(); + function S(s, E) { + var k = Object.keys(s); + if (Object.getOwnPropertySymbols) { + var p = Object.getOwnPropertySymbols(s); + E && (p = p.filter(function(m) { + return Object.getOwnPropertyDescriptor(s, m).enumerable + })), + k.push.apply(k, p) + } + return k + } + function l(s) { + for (var E = 1; E < arguments.length; E++) { + var k = arguments[E] != null ? arguments[E] : {}; + E % 2 ? S(Object(k), !0).forEach(function(p) { + a(s, p, k[p]) + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(k)) : S(Object(k)).forEach(function(p) { + Object.defineProperty(s, p, Object.getOwnPropertyDescriptor(k, p)) + }) + } + return s + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Px = xI(fx(), 1) + , xW = xI(_p(), 1); +const _x = ["cursor", "direction"]; +function Zi(A, t, a) { + const S = A.flatMap(l => l.split(".")); + if (!t && (!a || a === "any")) + return S.length ? [S] : []; + if (a === "infinite" && dI(t) && ("direction" in t || "cursor" in t)) { + const {cursor: l, direction: s} = t + , E = (0, + Px.default)(t, _x); + return [S, { + input: E, + type: "infinite" + }] + } + return [S, (0, + xW.default)((0, + xW.default)({}, typeof t < "u" && t !== ZS && { + input: t + }), a && a !== "any" && { + type: a + })] +} +function bJ(A) { + return Zi(A, void 0, "any") +} +var $x = Object.create + , TY = Object.defineProperty + , ty = Object.getOwnPropertyDescriptor + , jY = Object.getOwnPropertyNames + , Ay = Object.getPrototypeOf + , ay = Object.prototype.hasOwnProperty + , ji = (A, t) => function() { + return t || (0, + A[jY(A)[0]])((t = { + exports: {} + }).exports, t), + t.exports +} + , Sy = (A, t, a, S) => { + if (t && typeof t == "object" || typeof t == "function") + for (var l = jY(t), s = 0, E = l.length, k; s < E; s++) + k = l[s], + !ay.call(A, k) && k !== a && TY(A, k, { + get: (p => t[p]).bind(null, k), + enumerable: !(S = ty(t, k)) || S.enumerable + }); + return A +} + , DA = (A, t, a) => (a = A != null ? $x(Ay(A)) : {}, +Sy(TY(a, "default", { + value: A, + enumerable: !0 +}), A)) + , qY = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/typeof.js"(A, t) { + function a(S) { + "@babel/helpers - typeof"; + return t.exports = a = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(l) { + return typeof l + } + : function(l) { + return l && typeof Symbol == "function" && l.constructor === Symbol && l !== Symbol.prototype ? "symbol" : typeof l + } + , + t.exports.__esModule = !0, + t.exports.default = t.exports, + a(S) + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , iy = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js"(A, t) { + var a = qY().default; + function S(l, s) { + if (a(l) != "object" || !l) + return l; + var E = l[Symbol.toPrimitive]; + if (E !== void 0) { + var k = E.call(l, s || "default"); + if (a(k) != "object") + return k; + throw new TypeError("@@toPrimitive must return a primitive value.") + } + return (s === "string" ? String : Number)(l) + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , ly = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js"(A, t) { + var a = qY().default + , S = iy(); + function l(s) { + var E = S(s, "string"); + return a(E) == "symbol" ? E : E + "" + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , yI = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js"(A, t) { + var a = ly(); + function S(l, s, E) { + return (s = a(s)) in l ? Object.defineProperty(l, s, { + value: E, + enumerable: !0, + configurable: !0, + writable: !0 + }) : l[s] = E, + l + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Ei = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js"(A, t) { + var a = yI(); + function S(s, E) { + var k = Object.keys(s); + if (Object.getOwnPropertySymbols) { + var p = Object.getOwnPropertySymbols(s); + E && (p = p.filter(function(m) { + return Object.getOwnPropertyDescriptor(s, m).enumerable + })), + k.push.apply(k, p) + } + return k + } + function l(s) { + for (var E = 1; E < arguments.length; E++) { + var k = arguments[E] != null ? arguments[E] : {}; + E % 2 ? S(Object(k), !0).forEach(function(p) { + a(s, p, k[p]) + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(s, Object.getOwnPropertyDescriptors(k)) : S(Object(k)).forEach(function(p) { + Object.defineProperty(s, p, Object.getOwnPropertyDescriptor(k, p)) + }) + } + return s + } + t.exports = l, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}); +function sy(A) { + return t => { + let a = 0 + , S = null; + const l = []; + function s() { + S || (S = t.subscribe({ + next(k) { + for (const m of l) { + var p; + (p = m.next) === null || p === void 0 || p.call(m, k) + } + }, + error(k) { + for (const m of l) { + var p; + (p = m.error) === null || p === void 0 || p.call(m, k) + } + }, + complete() { + for (const p of l) { + var k; + (k = p.complete) === null || k === void 0 || k.call(p) + } + } + })) + } + function E() { + if (a === 0 && S) { + const k = S; + S = null, + k.unsubscribe() + } + } + return xC(k => (a++, + l.push(k), + s(), + { + unsubscribe() { + a--, + E(); + const p = l.findIndex(m => m === k); + p > -1 && l.splice(p, 1) + } + })) + } +} +function Iy(A) { + let t = A; + const a = [] + , S = E => { + t !== void 0 && E.next(t), + a.push(E) + } + , l = E => { + a.splice(a.indexOf(E), 1) + } + , s = xC(E => (S(E), + () => { + l(E) + } + )); + return s.next = E => { + if (t !== E) { + t = E; + for (const k of a) + k.next(E) + } + } + , + s.get = () => t, + s +} +function Ey(A) { + return xC(t => { + function a(l=0, s=A.op) { + const E = A.links[l]; + if (!E) + throw new Error("No more links to execute - did you forget to add an ending link?"); + return E({ + op: s, + next(p) { + return a(l + 1, p) + } + }) + } + return a().subscribe(t) + } + ) +} +var Nm = DA(yI()) + , qE = DA(Ei()); +function ey(A) { + return A instanceof le +} +function ky(A) { + return dI(A) && dI(A.error) && typeof A.error.code == "number" && typeof A.error.message == "string" +} +function py(A, t) { + return typeof A == "string" ? A : dI(A) && typeof A.message == "string" ? A.message : t +} +var le = class oJ extends Error { + constructor(t, a) { + var S, l; + const s = a?.cause; + super(t, { + cause: s + }), + (0, + Nm.default)(this, "cause", void 0), + (0, + Nm.default)(this, "shape", void 0), + (0, + Nm.default)(this, "data", void 0), + (0, + Nm.default)(this, "meta", void 0), + this.meta = a?.meta, + this.cause = s, + this.shape = a == null || (S = a.result) === null || S === void 0 ? void 0 : S.error, + this.data = a == null || (l = a.result) === null || l === void 0 ? void 0 : l.error.data, + this.name = "TRPCClientError", + Object.setPrototypeOf(this, oJ.prototype) + } + static from(t, a={}) { + const S = t; + return ey(S) ? (a.meta && (S.meta = (0, + qE.default)((0, + qE.default)({}, S.meta), a.meta)), + S) : ky(S) ? new oJ(S.error.message,(0, + qE.default)((0, + qE.default)({}, a), {}, { + result: S, + cause: a.cause + })) : new oJ(py(S, "Unknown error"),(0, + qE.default)((0, + qE.default)({}, a), {}, { + cause: S + })) + } +} +; +function ry(A) { + const t = A; + return t ? "input" in t ? t : { + input: t, + output: t + } : { + input: { + serialize: a => a, + deserialize: a => a + }, + output: { + serialize: a => a, + deserialize: a => a + } + } +} +const yW = A => typeof A == "function"; +function my(A) { + if (A) + return A; + if (typeof window < "u" && yW(window.fetch)) + return window.fetch; + if (typeof globalThis < "u" && yW(globalThis.fetch)) + return globalThis.fetch; + throw new Error("No fetch implementation found") +} +var ip = DA(Ei()); +function Jy(A) { + return { + url: A.url.toString(), + fetch: A.fetch, + transformer: ry(A.transformer), + methodOverride: A.methodOverride + } +} +function Cy(A) { + const t = {}; + for (let a = 0; a < A.length; a++) { + const S = A[a]; + t[a] = S + } + return t +} +const ny = { + query: "GET", + mutation: "POST", + subscription: "PATCH" +}; +function FY(A) { + return "input" in A ? A.transformer.input.serialize(A.input) : Cy(A.inputs.map(t => A.transformer.input.serialize(t))) +} +const xY = A => { + const t = A.url.split("?"); + let S = t[0].replace(/\/$/, "") + "/" + A.path; + const l = []; + if (t[1] && l.push(t[1]), + "inputs" in A && l.push("batch=1"), + A.type === "query" || A.type === "subscription") { + const s = FY(A); + s !== void 0 && A.methodOverride !== "POST" && l.push(`input=${encodeURIComponent(JSON.stringify(s))}`) + } + return l.length && (S += "?" + l.join("&")), + S +} + , by = A => { + if (A.type === "query" && A.methodOverride !== "POST") + return; + const t = FY(A); + return t !== void 0 ? JSON.stringify(t) : void 0 +} + , oy = A => Uy((0, +ip.default)((0, +ip.default)({}, A), {}, { + contentTypeHeader: "application/json", + getUrl: xY, + getBody: by +})); +var hy = class extends Error { + constructor() { + const A = "AbortError"; + super(A), + this.name = A, + this.message = A + } +} +; +const Qy = A => { + var t; + if (A?.aborted) + throw (t = A.throwIfAborted) === null || t === void 0 || t.call(A), + typeof DOMException < "u" ? new DOMException("AbortError","AbortError") : new hy +} +; +async function Ry(A) { + var t, a; + Qy(A.signal); + const S = A.getUrl(A) + , l = A.getBody(A) + , s = (t = A.methodOverride) !== null && t !== void 0 ? t : ny[A.type] + , E = await (async () => { + const p = await A.headers(); + return Symbol.iterator in p ? Object.fromEntries(p) : p + } + )() + , k = (0, + ip.default)((0, + ip.default)((0, + ip.default)({}, A.contentTypeHeader && s !== "GET" ? { + "content-type": A.contentTypeHeader + } : {}), A.trpcAcceptHeader ? { + [(a = A.trpcAcceptHeaderKey) !== null && a !== void 0 ? a : "trpc-accept"]: A.trpcAcceptHeader + } : void 0), E); + return my(A.fetch)(S, { + method: s, + signal: A.signal, + body: l, + headers: k + }) +} +async function Uy(A) { + const t = {} + , a = await Ry(A); + t.response = a; + const S = await a.json(); + return t.responseJSON = S, + { + json: S, + meta: t + } +} +DA(Ei()); +const LW = () => { + throw new Error("Something went wrong. Please submit an issue at https://github.com/trpc/trpc/issues/new") +} +; +function wW(A) { + let t = null + , a = null; + const S = () => { + clearTimeout(a), + a = null, + t = null + } + ; + function l(k) { + const p = [[]]; + let m = 0; + for (; ; ) { + const b = k[m]; + if (!b) + break; + const h = p[p.length - 1]; + if (b.aborted) { + var n; + (n = b.reject) === null || n === void 0 || n.call(b, new Error("Aborted")), + m++; + continue + } + if (A.validate(h.concat(b).map(R => R.key))) { + h.push(b), + m++; + continue + } + if (h.length === 0) { + var J; + (J = b.reject) === null || J === void 0 || J.call(b, new Error("Input is too big for a single dispatch")), + m++; + continue + } + p.push([]) + } + return p + } + function s() { + const k = l(t); + S(); + for (const p of k) { + if (!p.length) + continue; + const m = { + items: p + }; + for (const J of p) + J.batch = m; + A.fetch(m.items.map(J => J.key)).then(async J => { + await Promise.all(J.map(async (h, U) => { + const R = m.items[U]; + try { + var Z; + const W = await Promise.resolve(h); + (Z = R.resolve) === null || Z === void 0 || Z.call(R, W) + } catch (W) { + var g; + (g = R.reject) === null || g === void 0 || g.call(R, W) + } + R.batch = null, + R.reject = null, + R.resolve = null + } + )); + for (const h of m.items) { + var b; + (b = h.reject) === null || b === void 0 || b.call(h, new Error("Missing result")), + h.batch = null + } + } + ).catch(J => { + for (const h of m.items) { + var b; + (b = h.reject) === null || b === void 0 || b.call(h, J), + h.batch = null + } + } + ) + } + } + function E(k) { + var p; + const m = { + aborted: !1, + key: k, + batch: null, + resolve: LW, + reject: LW + } + , n = new Promise( (J, b) => { + var h; + m.reject = b, + m.resolve = J, + (h = t) !== null && h !== void 0 || (t = []), + t.push(m) + } + ); + return (p = a) !== null && p !== void 0 || (a = setTimeout(s)), + n + } + return { + load: E + } +} +function Zy(...A) { + const t = new AbortController + , a = A.length; + let S = 0; + const l = () => { + ++S === a && t.abort() + } + ; + for (const s of A) + s?.aborted ? l() : s?.addEventListener("abort", l, { + once: !0 + }); + return t.signal +} +var um = DA(Ei()); +function dy(A) { + var t, a; + const S = Jy(A) + , l = (t = A.maxURLLength) !== null && t !== void 0 ? t : 1 / 0 + , s = (a = A.maxItems) !== null && a !== void 0 ? a : 1 / 0; + return () => { + const E = n => ({ + validate(J) { + if (l === 1 / 0 && s === 1 / 0) + return !0; + if (J.length > s) + return !1; + const b = J.map(R => R.path).join(",") + , h = J.map(R => R.input); + return xY((0, + um.default)((0, + um.default)({}, S), {}, { + type: n, + path: b, + inputs: h, + signal: null + })).length <= l + }, + async fetch(J) { + const b = J.map(W => W.path).join(",") + , h = J.map(W => W.input) + , U = Zy(...J.map(W => W.signal)) + , R = await oy((0, + um.default)((0, + um.default)({}, S), {}, { + path: b, + inputs: h, + type: n, + headers() { + return A.headers ? typeof A.headers == "function" ? A.headers({ + opList: J + }) : A.headers : {} + }, + signal: U + })); + return (Array.isArray(R.json) ? R.json : J.map( () => R.json)).map(W => ({ + meta: R.meta, + json: W + })) + } + }) + , k = wW(E("query")) + , p = wW(E("mutation")) + , m = { + query: k, + mutation: p + }; + return ({op: n}) => xC(J => { + /* istanbul ignore if -- @preserve */ + if (n.type === "subscription") + throw new Error("Subscriptions are unsupported by `httpLink` - use `httpSubscriptionLink` or `wsLink`"); + const h = m[n.type].load(n); + let U; + return h.then(R => { + U = R; + const Z = Fx(R.json, S.transformer.output); + if (!Z.ok) { + J.error(le.from(Z.error, { + meta: R.meta + })); + return + } + J.next({ + context: R.meta, + result: Z.result + }), + J.complete() + } + ).catch(R => { + J.error(le.from(R, { + meta: U?.meta + })) + } + ), + () => {} + } + ) + } +} +DA(Ei()); +const yY = (A, ...t) => typeof A == "function" ? A(...t) : A; +DA(yI()); +function gy() { + let A, t; + return { + promise: new Promise( (S, l) => { + A = S, + t = l + } + ), + resolve: A, + reject: t + } +} +async function Wy(A) { + const t = await yY(A.url); + if (!A.connectionParams) + return t; + const S = `${t.includes("?") ? "&" : "?"}connectionParams=1`; + return t + S +} +async function cy(A, t) { + const a = { + method: "connectionParams", + data: await yY(A) + }; + return t.encode(a) +} +DA(yI()); +var ts = DA(yI()); +function Ky(A) { + const {promise: t, resolve: a, reject: S} = gy(); + return A.addEventListener("open", () => { + A.removeEventListener("error", S), + a() + } + ), + A.addEventListener("error", S), + t +} +function Gy(A, {intervalMs: t, pongTimeoutMs: a}) { + let S, l; + function s() { + S = setTimeout( () => { + A.send("PING"), + l = setTimeout( () => { + A.close() + } + , a) + } + , t) + } + function E() { + clearTimeout(S), + s() + } + function k() { + clearTimeout(l), + E() + } + A.addEventListener("open", s), + A.addEventListener("message", ({data: p}) => { + clearTimeout(S), + s(), + p === "PONG" && k() + } + ), + A.addEventListener("close", () => { + clearTimeout(S), + clearTimeout(l) + } + ) +} +var Yy = class kh { + constructor(t) { + var a; + if ((0, + ts.default)(this, "id", ++kh.connectCount), + (0, + ts.default)(this, "WebSocketPonyfill", void 0), + (0, + ts.default)(this, "urlOptions", void 0), + (0, + ts.default)(this, "keepAliveOpts", void 0), + (0, + ts.default)(this, "encoder", void 0), + (0, + ts.default)(this, "wsObservable", Iy(null)), + (0, + ts.default)(this, "openPromise", null), + this.WebSocketPonyfill = (a = t.WebSocketPonyfill) !== null && a !== void 0 ? a : WebSocket, + !this.WebSocketPonyfill) + throw new Error("No WebSocket implementation found - you probably don't want to use this on the server, but if you do you need to pass a `WebSocket`-ponyfill"); + this.urlOptions = t.urlOptions, + this.keepAliveOpts = t.keepAlive, + this.encoder = t.encoder + } + get ws() { + return this.wsObservable.get() + } + set ws(t) { + this.wsObservable.next(t) + } + isOpen() { + return !!this.ws && this.ws.readyState === this.WebSocketPonyfill.OPEN && !this.openPromise + } + isClosed() { + return !!this.ws && (this.ws.readyState === this.WebSocketPonyfill.CLOSING || this.ws.readyState === this.WebSocketPonyfill.CLOSED) + } + async open() { + var t = this; + if (t.openPromise) + return t.openPromise; + t.id = ++kh.connectCount; + const a = Wy(t.urlOptions).then(S => new t.WebSocketPonyfill(S)); + t.openPromise = a.then(async S => { + t.ws = S, + S.binaryType = "arraybuffer", + S.addEventListener("message", function({data: l}) { + l === "PING" && this.send("PONG") + }), + t.keepAliveOpts.enabled && Gy(S, t.keepAliveOpts), + S.addEventListener("close", () => { + t.ws === S && (t.ws = null) + } + ), + await Ky(S), + t.urlOptions.connectionParams && S.send(await cy(t.urlOptions.connectionParams, t.encoder)) + } + ); + try { + await t.openPromise + } finally { + t.openPromise = null + } + } + async close() { + var t = this; + try { + await t.openPromise + } finally { + var a; + (a = t.ws) === null || a === void 0 || a.close() + } + } +} +; +(0, +ts.default)(Yy, "connectCount", 0); +DA(yI()); +DA(Ei()); +var Vb = DA(yI()) + , zW = DA(Ei()) + , yC = class { + constructor(A) { + (0, + Vb.default)(this, "links", void 0), + (0, + Vb.default)(this, "runtime", void 0), + (0, + Vb.default)(this, "requestId", void 0), + this.requestId = 0, + this.runtime = {}, + this.links = A.links.map(t => t(this.runtime)) + } + $request(A) { + var t; + return Ey({ + links: this.links, + op: (0, + zW.default)((0, + zW.default)({}, A), {}, { + context: (t = A.context) !== null && t !== void 0 ? t : {}, + id: ++this.requestId + }) + }).pipe(sy()) + } + async requestAsPromise(A) { + var t = this; + try { + const a = t.$request(A); + return (await yx(a)).result.data + } catch (a) { + throw le.from(a) + } + } + query(A, t, a) { + return this.requestAsPromise({ + type: "query", + path: A, + input: t, + context: a?.context, + signal: a?.signal + }) + } + mutation(A, t, a) { + return this.requestAsPromise({ + type: "mutation", + path: A, + input: t, + context: a?.context, + signal: a?.signal + }) + } + subscription(A, t, a) { + return this.$request({ + type: "subscription", + path: A, + input: t, + context: a.context, + signal: a.signal + }).subscribe({ + next(l) { + switch (l.result.type) { + case "state": + { + var s; + (s = a.onConnectionStateChange) === null || s === void 0 || s.call(a, l.result); + break + } + case "started": + { + var E; + (E = a.onStarted) === null || E === void 0 || E.call(a, { + context: l.context + }); + break + } + case "stopped": + { + var k; + (k = a.onStopped) === null || k === void 0 || k.call(a); + break + } + case "data": + case void 0: + { + var p; + (p = a.onData) === null || p === void 0 || p.call(a, l.result.data); + break + } + } + }, + error(l) { + var s; + (s = a.onError) === null || s === void 0 || s.call(a, l) + }, + complete() { + var l; + (l = a.onComplete) === null || l === void 0 || l.call(a) + } + }) + } +} +; +const LY = Symbol.for("trpc_untypedClient") + , Ny = { + query: "query", + mutate: "mutation", + subscribe: "subscription" +} + , uy = A => Ny[A]; +function wY(A) { + const t = FC( ({path: a, args: S}) => { + const l = [...a] + , s = uy(l.pop()) + , E = l.join("."); + return A[s](E, ...S) + } + ); + return jQ(a => a === LY ? A : t[a]) +} +function My(A) { + const t = new yC(A); + return wY(t) +} +function FQ(A) { + return A[LY] +} +DA(Ei()); +DA(Ei()); +var By = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(A, t) { + function a(l) { + var s, E, k, p = 2; + for (typeof Symbol < "u" && (E = Symbol.asyncIterator, + k = Symbol.iterator); p--; ) { + if (E && (s = l[E]) != null) + return s.call(l); + if (k && (s = l[k]) != null) + return new S(s.call(l)); + E = "@@asyncIterator", + k = "@@iterator" + } + throw new TypeError("Object is not async iterable") + } + function S(l) { + function s(E) { + if (Object(E) !== E) + return Promise.reject(new TypeError(E + " is not an object.")); + var k = E.done; + return Promise.resolve(E.value).then(function(p) { + return { + value: p, + done: k + } + }) + } + return S = function(k) { + this.s = k, + this.n = k.next + } + , + S.prototype = { + s: null, + n: null, + next: function() { + return s(this.n.apply(this.s, arguments)) + }, + return: function(k) { + var p = this.s.return; + return p === void 0 ? Promise.resolve({ + value: k, + done: !0 + }) : s(p.apply(this.s, arguments)) + }, + throw: function(k) { + var p = this.s.return; + return p === void 0 ? Promise.reject(k) : s(p.apply(this.s, arguments)) + } + }, + new S(l) + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}); +DA(By()); +DA(Ei()); +var Ty = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/usingCtx.js"(A, t) { + function a() { + var S = typeof SuppressedError == "function" ? SuppressedError : function(k, p) { + var m = Error(); + return m.name = "SuppressedError", + m.error = k, + m.suppressed = p, + m + } + , l = {} + , s = []; + function E(k, p) { + if (p != null) { + if (Object(p) !== p) + throw new TypeError("using declarations can only be used with objects, functions, null, or undefined."); + if (k) + var m = p[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")]; + if (m === void 0 && (m = p[Symbol.dispose || Symbol.for("Symbol.dispose")], + k)) + var n = m; + if (typeof m != "function") + throw new TypeError("Object is not disposable."); + n && (m = function() { + try { + n.call(p) + } catch (b) { + return Promise.reject(b) + } + } + ), + s.push({ + v: p, + d: m, + a: k + }) + } else + k && s.push({ + d: p, + a: k + }); + return p + } + return { + e: l, + u: E.bind(null, !1), + a: E.bind(null, !0), + d: function() { + var p, m = this.e, n = 0; + function J() { + for (; p = s.pop(); ) + try { + if (!p.a && n === 1) + return n = 0, + s.push(p), + Promise.resolve().then(J); + if (p.d) { + var h = p.d.call(p.v); + if (p.a) + return n |= 2, + Promise.resolve(h).then(J, b) + } else + n |= 1 + } catch (U) { + return b(U) + } + if (n === 1) + return m !== l ? Promise.reject(m) : Promise.resolve(); + if (m !== l) + throw m + } + function b(h) { + return m = m !== l ? new S(h,m) : h, + J() + } + return J() + } + } + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , zY = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/OverloadYield.js"(A, t) { + function a(S, l) { + this.v = S, + this.k = l + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , jy = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/awaitAsyncGenerator.js"(A, t) { + var a = zY(); + function S(l) { + return new a(l,0) + } + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , qy = ji({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/wrapAsyncGenerator.js"(A, t) { + var a = zY(); + function S(s) { + return function() { + return new l(s.apply(this, arguments)) + } + } + function l(s) { + var E, k; + function p(n, J) { + try { + var b = s[n](J) + , h = b.value + , U = h instanceof a; + Promise.resolve(U ? h.v : h).then(function(R) { + if (U) { + var Z = n === "return" ? "return" : "next"; + if (!h.k || R.done) + return p(Z, R); + R = s[Z](R).value + } + m(b.done ? "return" : "normal", R) + }, function(R) { + p("throw", R) + }) + } catch (R) { + m("throw", R) + } + } + function m(n, J) { + switch (n) { + case "return": + E.resolve({ + value: J, + done: !0 + }); + break; + case "throw": + E.reject(J); + break; + default: + E.resolve({ + value: J, + done: !1 + }) + } + (E = E.next) ? p(E.key, E.arg) : k = null + } + this._invoke = function(n, J) { + return new Promise(function(b, h) { + var U = { + key: n, + arg: J, + resolve: b, + reject: h, + next: null + }; + k ? k = k.next = U : (E = k = U, + p(n, J)) + } + ) + } + , + typeof s.return != "function" && (this.return = void 0) + } + l.prototype[typeof Symbol == "function" && Symbol.asyncIterator || "@@asyncIterator"] = function() { + return this + } + , + l.prototype.next = function(s) { + return this._invoke("next", s) + } + , + l.prototype.throw = function(s) { + return this._invoke("throw", s) + } + , + l.prototype.return = function(s) { + return this._invoke("return", s) + } + , + t.exports = S, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}); +DA(Ty()); +DA(jy()); +DA(qy()); +DA(Ei()); +function Fy(A) { + return FC( ({path: t, args: a}) => { + var S; + const l = [...t] + , s = l.pop(); + if (s === "useMutation") + return A[s](l, ...a); + if (s === "_def") + return { + path: l + }; + const [E,...k] = a + , p = (S = k[0]) !== null && S !== void 0 ? S : {}; + return A[s](l, E, p) + } + ) +} +var Db; +const xy = ["client", "ssrContext", "ssrState", "abortOnUnmount"] + , yy = (Db = d.createContext) === null || Db === void 0 ? void 0 : Db.call(TC, null) + , Ly = A => { + switch (A) { + case "queryOptions": + case "fetch": + case "ensureData": + case "prefetch": + case "getData": + case "setData": + case "setQueriesData": + return "query"; + case "infiniteQueryOptions": + case "fetchInfinite": + case "prefetchInfinite": + case "getInfiniteData": + case "setInfiniteData": + return "infinite"; + case "setMutationDefaults": + case "getMutationDefaults": + case "isMutating": + case "cancel": + case "invalidate": + case "refetch": + case "reset": + return "any" + } +} +; +function wy(A) { + return FC(t => { + const a = [...t.path] + , S = a.pop() + , l = [...t.args] + , s = l.shift() + , E = Ly(S) + , k = Zi(a, s, E); + return { + infiniteQueryOptions: () => A.infiniteQueryOptions(a, k, l[0]), + queryOptions: () => A.queryOptions(a, k, ...l), + fetch: () => A.fetchQuery(k, ...l), + fetchInfinite: () => A.fetchInfiniteQuery(k, l[0]), + prefetch: () => A.prefetchQuery(k, ...l), + prefetchInfinite: () => A.prefetchInfiniteQuery(k, l[0]), + ensureData: () => A.ensureQueryData(k, ...l), + invalidate: () => A.invalidateQueries(k, ...l), + reset: () => A.resetQueries(k, ...l), + refetch: () => A.refetchQueries(k, ...l), + cancel: () => A.cancelQuery(k, ...l), + setData: () => { + A.setQueryData(k, l[0], l[1]) + } + , + setQueriesData: () => A.setQueriesData(k, l[0], l[1], l[2]), + setInfiniteData: () => { + A.setInfiniteQueryData(k, l[0], l[1]) + } + , + getData: () => A.getQueryData(k), + getInfiniteData: () => A.getInfiniteQueryData(k), + setMutationDefaults: () => A.setMutationDefaults(bJ(a), s), + getMutationDefaults: () => A.getMutationDefaults(bJ(a)), + isMutating: () => A.isMutating({ + mutationKey: bJ(a) + }) + }[S]() + } + ) +} +function zy(A) { + const t = wY(A.client) + , a = wy(A); + return jQ(S => { + const l = S; + return l === "client" ? t : xy.includes(l) ? A[l] : a[S] + } + ) +} +var Oy = xI(_p(), 1); +function OW(A) { + const t = A instanceof yC ? A : FQ(A); + return FC(a => { + const S = a.path + , l = S.join(".") + , [s,E] = a.args; + return (0, + Oy.default)({ + queryKey: Zi(S, s, "query"), + queryFn: () => t.query(l, s, E?.trpc) + }, E) + } + ) +} +var fb = xI(_p(), 1); +function xa(A, t, a) { + var S; + const l = A[0]; + let s = (S = A[1]) === null || S === void 0 ? void 0 : S.input; + if (a) { + var E; + s = (0, + fb.default)((0, + fb.default)((0, + fb.default)({}, (E = s) !== null && E !== void 0 ? E : {}), a.pageParam ? { + cursor: a.pageParam + } : {}), {}, { + direction: a.direction + }) + } + return [l.join("."), s, t?.trpc] +} +var Vy = gs({ + "../../node_modules/.pnpm/@oxc-project+runtime@0.72.2/node_modules/@oxc-project/runtime/src/helpers/asyncIterator.js"(A, t) { + function a(l) { + var s, E, k, p = 2; + for (typeof Symbol < "u" && (E = Symbol.asyncIterator, + k = Symbol.iterator); p--; ) { + if (E && (s = l[E]) != null) + return s.call(l); + if (k && (s = l[k]) != null) + return new S(s.call(l)); + E = "@@asyncIterator", + k = "@@iterator" + } + throw new TypeError("Object is not async iterable") + } + function S(l) { + function s(E) { + if (Object(E) !== E) + return Promise.reject(new TypeError(E + " is not an object.")); + var k = E.done; + return Promise.resolve(E.value).then(function(p) { + return { + value: p, + done: k + } + }) + } + return S = function(k) { + this.s = k, + this.n = k.next + } + , + S.prototype = { + s: null, + n: null, + next: function() { + return s(this.n.apply(this.s, arguments)) + }, + return: function(k) { + var p = this.s.return; + return p === void 0 ? Promise.resolve({ + value: k, + done: !0 + }) : s(p.apply(this.s, arguments)) + }, + throw: function(k) { + var p = this.s.return; + return p === void 0 ? Promise.reject(k) : s(p.apply(this.s, arguments)) + } + }, + new S(l) + } + t.exports = a, + t.exports.__esModule = !0, + t.exports.default = t.exports + } +}) + , Dy = xI(Vy(), 1); +function ph(A) { + return { + path: A.path.join(".") + } +} +function ck(A) { + const t = ph(A); + return d.useMemo( () => t, [t]) +} +async function OY(A, t, a) { + const l = t.getQueryCache().build(t, { + queryKey: a + }); + l.setState({ + data: [], + status: "success" + }); + const s = []; + var E = !1, k = !1, p; + try { + for (var m = (0, + Dy.default)(A), n; E = !(n = await m.next()).done; E = !1) { + const J = n.value; + s.push(J), + l.setState({ + data: [...s] + }) + } + } catch (J) { + k = !0, + p = J + } finally { + try { + E && m.return != null && await m.return() + } finally { + if (k) + throw p + } + } + return s +} +var lA = xI(_p(), 1); +function fy(A) { + const {client: t, queryClient: a} = A + , S = t instanceof yC ? t : FQ(t); + return { + infiniteQueryOptions: (l, s, E) => { + var k, p; + const m = ((k = s[1]) === null || k === void 0 ? void 0 : k.input) === ZS + , n = async J => { + var b; + const h = (0, + lA.default)((0, + lA.default)({}, E), {}, { + trpc: (0, + lA.default)((0, + lA.default)({}, E?.trpc), !(E == null || (b = E.trpc) === null || b === void 0) && b.abortOnUnmount ? { + signal: J.signal + } : { + signal: null + }) + }); + return await S.query(...xa(s, h, { + direction: J.direction, + pageParam: J.pageParam + })) + } + ; + return Object.assign((0, + lA.default)((0, + lA.default)({}, E), {}, { + initialData: E?.initialData, + queryKey: s, + queryFn: m ? ZS : n, + initialPageParam: (p = E?.initialCursor) !== null && p !== void 0 ? p : null + }), { + trpc: ph({ + path: l + }) + }) + } + , + queryOptions: (l, s, E) => { + var k; + const p = ((k = s[1]) === null || k === void 0 ? void 0 : k.input) === ZS + , m = async n => { + var J; + const b = (0, + lA.default)((0, + lA.default)({}, E), {}, { + trpc: (0, + lA.default)((0, + lA.default)({}, E?.trpc), !(E == null || (J = E.trpc) === null || J === void 0) && J.abortOnUnmount ? { + signal: n.signal + } : { + signal: null + }) + }) + , h = await S.query(...xa(s, b)); + return gY(h) ? OY(h, a, s) : h + } + ; + return Object.assign((0, + lA.default)((0, + lA.default)({}, E), {}, { + initialData: E?.initialData, + queryKey: s, + queryFn: p ? ZS : m + }), { + trpc: ph({ + path: l + }) + }) + } + , + fetchQuery: (l, s) => a.fetchQuery((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l, + queryFn: () => S.query(...xa(l, s)) + })), + fetchInfiniteQuery: (l, s) => { + var E; + return a.fetchInfiniteQuery((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l, + queryFn: ({pageParam: k, direction: p}) => S.query(...xa(l, s, { + pageParam: k, + direction: p + })), + initialPageParam: (E = s?.initialCursor) !== null && E !== void 0 ? E : null + })) + } + , + prefetchQuery: (l, s) => a.prefetchQuery((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l, + queryFn: () => S.query(...xa(l, s)) + })), + prefetchInfiniteQuery: (l, s) => { + var E; + return a.prefetchInfiniteQuery((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l, + queryFn: ({pageParam: k, direction: p}) => S.query(...xa(l, s, { + pageParam: k, + direction: p + })), + initialPageParam: (E = s?.initialCursor) !== null && E !== void 0 ? E : null + })) + } + , + ensureQueryData: (l, s) => a.ensureQueryData((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l, + queryFn: () => S.query(...xa(l, s)) + })), + invalidateQueries: (l, s, E) => a.invalidateQueries((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l + }), E), + resetQueries: (l, s, E) => a.resetQueries((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l + }), E), + refetchQueries: (l, s, E) => a.refetchQueries((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l + }), E), + cancelQuery: (l, s) => a.cancelQueries({ + queryKey: l + }, s), + setQueryData: (l, s, E) => a.setQueryData(l, s, E), + setQueriesData: (l, s, E, k) => a.setQueriesData((0, + lA.default)((0, + lA.default)({}, s), {}, { + queryKey: l + }), E, k), + getQueryData: l => a.getQueryData(l), + setInfiniteQueryData: (l, s, E) => a.setQueryData(l, s, E), + getInfiniteQueryData: l => a.getQueryData(l), + setMutationDefaults: (l, s) => { + const E = l[0] + , k = p => S.mutation(...xa([E, { + input: p + }], A)); + return a.setMutationDefaults(l, typeof s == "function" ? s({ + canonicalMutationFn: k + }) : s) + } + , + getMutationDefaults: l => a.getMutationDefaults(l), + isMutating: l => a.isMutating((0, + lA.default)((0, + lA.default)({}, l), {}, { + exact: !0 + })) + } +} +var bt = xI(_p()); +const VW = (A, t) => new Proxy(A,{ + get(S, l) { + return t(l), + S[l] + } +}); +function vy(A) { + var t, a; + const S = (t = void 0) !== null && t !== void 0 ? t : Y => Y.originalFn() + , l = (a = void 0) !== null && a !== void 0 ? a : yy + , s = My + , E = Y => { + var B; + const {abortOnUnmount: G=!1, queryClient: M, ssrContext: L} = Y + , [v,at] = d.useState((B = Y.ssrState) !== null && B !== void 0 ? B : !1) + , tt = Y.client instanceof yC ? Y.client : FQ(Y.client) + , y = d.useMemo( () => fy({ + client: tt, + queryClient: M + }), [tt, M]) + , St = d.useMemo( () => (0, + bt.default)({ + abortOnUnmount: G, + queryClient: M, + client: tt, + ssrContext: L ?? null, + ssrState: v + }, y), [G, tt, y, M, L, v]); + return d.useEffect( () => { + at(It => It ? "mounted" : !1) + } + , []), + i.jsx(l.Provider, { + value: St, + children: Y.children + }) + } + ; + function k() { + const Y = d.useContext(l); + if (!Y) + throw new Error("Unable to find tRPC Context. Did you forget to wrap your App inside `withTRPC` HoC?"); + return Y + } + function p(Y, B) { + var G; + const {queryClient: M, ssrState: L} = k(); + return L && L !== "mounted" && ((G = M.getQueryCache().find({ + queryKey: Y + })) === null || G === void 0 ? void 0 : G.state.status) === "error" ? (0, + bt.default)({ + retryOnMount: !1 + }, B) : B + } + function m(Y, B, G) { + var M, L, v, at, tt; + const y = k() + , {abortOnUnmount: St, client: It, ssrState: T, queryClient: z, prefetchQuery: q} = y + , _ = Zi(Y, B, "query") + , rt = z.getQueryDefaults(_) + , j = B === ZS; + typeof window > "u" && T === "prepass" && (G == null || (M = G.trpc) === null || M === void 0 ? void 0 : M.ssr) !== !1 && ((L = G?.enabled) !== null && L !== void 0 ? L : rt?.enabled) !== !1 && !j && !z.getQueryCache().find({ + queryKey: _ + }) && q(_, G); + const H = p(_, (0, + bt.default)((0, + bt.default)({}, rt), G)) + , V = (v = (at = G == null || (tt = G.trpc) === null || tt === void 0 ? void 0 : tt.abortOnUnmount) !== null && at !== void 0 ? at : void 0) !== null && v !== void 0 ? v : St + , P = Qx((0, + bt.default)((0, + bt.default)({}, H), {}, { + queryKey: _, + queryFn: j ? B : async et => { + const Ct = (0, + bt.default)((0, + bt.default)({}, H), {}, { + trpc: (0, + bt.default)((0, + bt.default)({}, H?.trpc), V ? { + signal: et.signal + } : { + signal: null + }) + }) + , lt = await It.query(...xa(_, Ct)); + return gY(lt) ? OY(lt, z, _) : lt + } + }), z); + return P.trpc = ck({ + path: Y + }), + P + } + function n(Y, B, G) { + var M, L, v; + const at = k() + , tt = Zi(Y, B, "query") + , y = B === ZS + , St = (M = (L = G == null || (v = G.trpc) === null || v === void 0 ? void 0 : v.abortOnUnmount) !== null && L !== void 0 ? L : void 0) !== null && M !== void 0 ? M : at.abortOnUnmount; + dx((0, + bt.default)((0, + bt.default)({}, G), {}, { + queryKey: tt, + queryFn: y ? B : It => { + const T = { + trpc: (0, + bt.default)((0, + bt.default)({}, G?.trpc), St ? { + signal: It.signal + } : {}) + }; + return at.client.query(...xa(tt, T)) + } + })) + } + function J(Y, B, G) { + var M, L, v; + const at = k() + , tt = Zi(Y, B, "query") + , y = (M = (L = G == null || (v = G.trpc) === null || v === void 0 ? void 0 : v.abortOnUnmount) !== null && L !== void 0 ? L : void 0) !== null && M !== void 0 ? M : at.abortOnUnmount + , St = Rx((0, + bt.default)((0, + bt.default)({}, G), {}, { + queryKey: tt, + queryFn: It => { + const T = (0, + bt.default)((0, + bt.default)({}, G), {}, { + trpc: (0, + bt.default)((0, + bt.default)({}, G?.trpc), y ? { + signal: It.signal + } : { + signal: null + }) + }); + return at.client.query(...xa(tt, T)) + } + }), at.queryClient); + return St.trpc = ck({ + path: Y + }), + [St.data, St] + } + function b(Y, B) { + const {client: G, queryClient: M} = k() + , L = bJ(Y) + , v = M.defaultMutationOptions(M.getMutationDefaults(L)) + , at = Wx((0, + bt.default)((0, + bt.default)({}, B), {}, { + mutationKey: L, + mutationFn: tt => G.mutation(...xa([Y, { + input: tt + }], B)), + onSuccess(...tt) { + var y, St; + return S({ + originalFn: () => { + var T, z, q; + return (T = B == null || (z = B.onSuccess) === null || z === void 0 ? void 0 : z.call(B, ...tt)) !== null && T !== void 0 ? T : v == null || (q = v.onSuccess) === null || q === void 0 ? void 0 : q.call(v, ...tt) + } + , + queryClient: M, + meta: (y = (St = B?.meta) !== null && St !== void 0 ? St : v?.meta) !== null && y !== void 0 ? y : {} + }) + } + }), M); + return at.trpc = ck({ + path: Y + }), + at + } + const h = { + data: void 0, + error: null, + status: "idle" + } + , U = { + data: void 0, + error: null, + status: "connecting" + }; + /* istanbul ignore next -- @preserve */ + function R(Y, B, G) { + var M; + const L = (M = G?.enabled) !== null && M !== void 0 ? M : B !== ZS + , v = bs(Zi(Y, B, "any")) + , {client: at} = k() + , tt = d.useRef(G); + d.useEffect( () => { + tt.current = G + } + ); + const [y] = d.useState(new Set([])) + , St = d.useCallback(j => { + y.add(j) + } + , [y]) + , It = d.useRef(null) + , T = d.useCallback(j => { + const H = q.current + , V = q.current = j(H); + let P = !1; + for (const et of y) + if (H[et] !== V[et]) { + P = !0; + break + } + P && rt(VW(V, St)) + } + , [St, y]) + , z = d.useCallback( () => { + var j; + if ((j = It.current) === null || j === void 0 || j.unsubscribe(), + !L) { + T( () => (0, + bt.default)((0, + bt.default)({}, h), {}, { + reset: z + })); + return + } + T( () => (0, + bt.default)((0, + bt.default)({}, U), {}, { + reset: z + })); + const H = at.subscription(Y.join("."), B ?? void 0, { + onStarted: () => { + var V, P; + (V = (P = tt.current).onStarted) === null || V === void 0 || V.call(P), + T(et => (0, + bt.default)((0, + bt.default)({}, et), {}, { + status: "pending", + error: null + })) + } + , + onData: V => { + var P, et; + (P = (et = tt.current).onData) === null || P === void 0 || P.call(et, V), + T(Ct => (0, + bt.default)((0, + bt.default)({}, Ct), {}, { + status: "pending", + data: V, + error: null + })) + } + , + onError: V => { + var P, et; + (P = (et = tt.current).onError) === null || P === void 0 || P.call(et, V), + T(Ct => (0, + bt.default)((0, + bt.default)({}, Ct), {}, { + status: "error", + error: V + })) + } + , + onConnectionStateChange: V => { + T(P => { + switch (V.state) { + case "idle": + return (0, + bt.default)((0, + bt.default)({}, P), {}, { + status: V.state, + error: null, + data: void 0 + }); + case "connecting": + return (0, + bt.default)((0, + bt.default)({}, P), {}, { + error: V.error, + status: V.state + }); + case "pending": + return P + } + } + ) + } + , + onComplete: () => { + var V, P; + (V = (P = tt.current).onComplete) === null || V === void 0 || V.call(P), + T(et => (0, + bt.default)((0, + bt.default)({}, et), {}, { + status: "idle", + error: null, + data: void 0 + })) + } + }); + It.current = H + } + , [at, v, L, T]); + d.useEffect( () => (z(), + () => { + var j; + (j = It.current) === null || j === void 0 || j.unsubscribe() + } + ), [z]); + const q = d.useRef(L ? (0, + bt.default)((0, + bt.default)({}, U), {}, { + reset: z + }) : (0, + bt.default)((0, + bt.default)({}, h), {}, { + reset: z + })) + , [_,rt] = d.useState(VW(q.current, St)); + return _ + } + function Z(Y, B, G) { + var M, L, v, at, tt; + const {client: y, ssrState: St, prefetchInfiniteQuery: It, queryClient: T, abortOnUnmount: z} = k() + , q = Zi(Y, B, "infinite") + , _ = T.getQueryDefaults(q) + , rt = B === ZS; + typeof window > "u" && St === "prepass" && (G == null || (M = G.trpc) === null || M === void 0 ? void 0 : M.ssr) !== !1 && ((L = G?.enabled) !== null && L !== void 0 ? L : _?.enabled) !== !1 && !rt && !T.getQueryCache().find({ + queryKey: q + }) && It(q, (0, + bt.default)((0, + bt.default)({}, _), G)); + const j = p(q, (0, + bt.default)((0, + bt.default)({}, _), G)) + , H = (v = G == null || (at = G.trpc) === null || at === void 0 ? void 0 : at.abortOnUnmount) !== null && v !== void 0 ? v : z + , V = cx((0, + bt.default)((0, + bt.default)({}, j), {}, { + initialPageParam: (tt = G.initialCursor) !== null && tt !== void 0 ? tt : null, + persister: G.persister, + queryKey: q, + queryFn: rt ? B : P => { + var et; + const Ct = (0, + bt.default)((0, + bt.default)({}, j), {}, { + trpc: (0, + bt.default)((0, + bt.default)({}, j?.trpc), H ? { + signal: P.signal + } : { + signal: null + }) + }); + return y.query(...xa(q, Ct, { + pageParam: (et = P.pageParam) !== null && et !== void 0 ? et : G.initialCursor, + direction: P.direction + })) + } + }), T); + return V.trpc = ck({ + path: Y + }), + V + } + function g(Y, B, G) { + var M, L, v; + const at = k() + , tt = Zi(Y, B, "infinite") + , y = at.queryClient.getQueryDefaults(tt) + , St = B === ZS + , It = p(tt, (0, + bt.default)((0, + bt.default)({}, y), G)) + , T = (M = G == null || (L = G.trpc) === null || L === void 0 ? void 0 : L.abortOnUnmount) !== null && M !== void 0 ? M : at.abortOnUnmount; + gx((0, + bt.default)((0, + bt.default)({}, G), {}, { + initialPageParam: (v = G.initialCursor) !== null && v !== void 0 ? v : null, + queryKey: tt, + queryFn: St ? B : z => { + var q; + const _ = (0, + bt.default)((0, + bt.default)({}, It), {}, { + trpc: (0, + bt.default)((0, + bt.default)({}, It?.trpc), T ? { + signal: z.signal + } : {}) + }); + return at.client.query(...xa(tt, _, { + pageParam: (q = z.pageParam) !== null && q !== void 0 ? q : G.initialCursor, + direction: z.direction + })) + } + })) + } + function W(Y, B, G) { + var M, L, v; + const at = k() + , tt = Zi(Y, B, "infinite") + , y = at.queryClient.getQueryDefaults(tt) + , St = p(tt, (0, + bt.default)((0, + bt.default)({}, y), G)) + , It = (M = G == null || (L = G.trpc) === null || L === void 0 ? void 0 : L.abortOnUnmount) !== null && M !== void 0 ? M : at.abortOnUnmount + , T = Ux((0, + bt.default)((0, + bt.default)({}, G), {}, { + initialPageParam: (v = G.initialCursor) !== null && v !== void 0 ? v : null, + queryKey: tt, + queryFn: z => { + var q; + const _ = (0, + bt.default)((0, + bt.default)({}, St), {}, { + trpc: (0, + bt.default)((0, + bt.default)({}, St?.trpc), It ? { + signal: z.signal + } : {}) + }); + return at.client.query(...xa(tt, _, { + pageParam: (q = z.pageParam) !== null && q !== void 0 ? q : G.initialCursor, + direction: z.direction + })) + } + }), at.queryClient); + return T.trpc = ck({ + path: Y + }), + [T.data, T] + } + return { + Provider: E, + createClient: s, + useContext: k, + useUtils: k, + useQuery: m, + usePrefetchQuery: n, + useSuspenseQuery: J, + useQueries: (Y, B) => { + const {ssrState: G, queryClient: M, prefetchQuery: L, client: v} = k() + , at = OW(v) + , tt = Y(at); + if (typeof window > "u" && G === "prepass") + for (const St of tt) { + var y; + const It = St; + ((y = It.trpc) === null || y === void 0 ? void 0 : y.ssr) !== !1 && !M.getQueryCache().find({ + queryKey: It.queryKey + }) && L(It.queryKey, It) + } + return dY({ + queries: tt.map(St => (0, + bt.default)((0, + bt.default)({}, St), {}, { + queryKey: St.queryKey + })), + combine: B?.combine + }, M) + } + , + useSuspenseQueries: Y => { + const {queryClient: B, client: G} = k() + , M = OW(G) + , L = Y(M) + , v = Zx({ + queries: L.map(at => (0, + bt.default)((0, + bt.default)({}, at), {}, { + queryFn: at.queryFn, + queryKey: at.queryKey + })) + }, B); + return [v.map(at => at.data), v] + } + , + useMutation: b, + useSubscription: R, + useInfiniteQuery: Z, + usePrefetchInfiniteQuery: g, + useSuspenseInfiniteQuery: W + } +} +function Xy(A) { + const t = Fy(A); + return jQ(a => a === "useContext" || a === "useUtils" ? () => { + const S = A.useUtils(); + return d.useMemo( () => zy(S), [S]) + } + : A.hasOwnProperty(a) ? A[a] : t[a]) +} +function Hy(A) { + const t = vy(); + return Xy(t) +} +const ot = Hy() + , Py = "Please login (10001)"; +var vb = { + exports: {} +} + , Kk = {} + , Xb = { + exports: {} +} + , Hb = {}; +/** + * @license React + * scheduler.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var DW; +function _y() { + return DW || (DW = 1, + (function(A) { + function t(T, z) { + var q = T.length; + T.push(z); + t: for (; 0 < q; ) { + var _ = q - 1 >>> 1 + , rt = T[_]; + if (0 < l(rt, z)) + T[_] = z, + T[q] = rt, + q = _; + else + break t + } + } + function a(T) { + return T.length === 0 ? null : T[0] + } + function S(T) { + if (T.length === 0) + return null; + var z = T[0] + , q = T.pop(); + if (q !== z) { + T[0] = q; + t: for (var _ = 0, rt = T.length, j = rt >>> 1; _ < j; ) { + var H = 2 * (_ + 1) - 1 + , V = T[H] + , P = H + 1 + , et = T[P]; + if (0 > l(V, q)) + P < rt && 0 > l(et, V) ? (T[_] = et, + T[P] = q, + _ = P) : (T[_] = V, + T[H] = q, + _ = H); + else if (P < rt && 0 > l(et, q)) + T[_] = et, + T[P] = q, + _ = P; + else + break t + } + } + return z + } + function l(T, z) { + var q = T.sortIndex - z.sortIndex; + return q !== 0 ? q : T.id - z.id + } + if (A.unstable_now = void 0, + typeof performance == "object" && typeof performance.now == "function") { + var s = performance; + A.unstable_now = function() { + return s.now() + } + } else { + var E = Date + , k = E.now(); + A.unstable_now = function() { + return E.now() - k + } + } + var p = [] + , m = [] + , n = 1 + , J = null + , b = 3 + , h = !1 + , U = !1 + , R = !1 + , Z = !1 + , g = typeof setTimeout == "function" ? setTimeout : null + , W = typeof clearTimeout == "function" ? clearTimeout : null + , c = typeof setImmediate < "u" ? setImmediate : null; + function u(T) { + for (var z = a(m); z !== null; ) { + if (z.callback === null) + S(m); + else if (z.startTime <= T) + S(m), + z.sortIndex = z.expirationTime, + t(p, z); + else + break; + z = a(m) + } + } + function Y(T) { + if (R = !1, + u(T), + !U) + if (a(p) !== null) + U = !0, + B || (B = !0, + tt()); + else { + var z = a(m); + z !== null && It(Y, z.startTime - T) + } + } + var B = !1 + , G = -1 + , M = 5 + , L = -1; + function v() { + return Z ? !0 : !(A.unstable_now() - L < M) + } + function at() { + if (Z = !1, + B) { + var T = A.unstable_now(); + L = T; + var z = !0; + try { + t: { + U = !1, + R && (R = !1, + W(G), + G = -1), + h = !0; + var q = b; + try { + A: { + for (u(T), + J = a(p); J !== null && !(J.expirationTime > T && v()); ) { + var _ = J.callback; + if (typeof _ == "function") { + J.callback = null, + b = J.priorityLevel; + var rt = _(J.expirationTime <= T); + if (T = A.unstable_now(), + typeof rt == "function") { + J.callback = rt, + u(T), + z = !0; + break A + } + J === a(p) && S(p), + u(T) + } else + S(p); + J = a(p) + } + if (J !== null) + z = !0; + else { + var j = a(m); + j !== null && It(Y, j.startTime - T), + z = !1 + } + } + break t + } finally { + J = null, + b = q, + h = !1 + } + z = void 0 + } + } finally { + z ? tt() : B = !1 + } + } + } + var tt; + if (typeof c == "function") + tt = function() { + c(at) + } + ; + else if (typeof MessageChannel < "u") { + var y = new MessageChannel + , St = y.port2; + y.port1.onmessage = at, + tt = function() { + St.postMessage(null) + } + } else + tt = function() { + g(at, 0) + } + ; + function It(T, z) { + G = g(function() { + T(A.unstable_now()) + }, z) + } + A.unstable_IdlePriority = 5, + A.unstable_ImmediatePriority = 1, + A.unstable_LowPriority = 4, + A.unstable_NormalPriority = 3, + A.unstable_Profiling = null, + A.unstable_UserBlockingPriority = 2, + A.unstable_cancelCallback = function(T) { + T.callback = null + } + , + A.unstable_forceFrameRate = function(T) { + 0 > T || 125 < T ? console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported") : M = 0 < T ? Math.floor(1e3 / T) : 5 + } + , + A.unstable_getCurrentPriorityLevel = function() { + return b + } + , + A.unstable_next = function(T) { + switch (b) { + case 1: + case 2: + case 3: + var z = 3; + break; + default: + z = b + } + var q = b; + b = z; + try { + return T() + } finally { + b = q + } + } + , + A.unstable_requestPaint = function() { + Z = !0 + } + , + A.unstable_runWithPriority = function(T, z) { + switch (T) { + case 1: + case 2: + case 3: + case 4: + case 5: + break; + default: + T = 3 + } + var q = b; + b = T; + try { + return z() + } finally { + b = q + } + } + , + A.unstable_scheduleCallback = function(T, z, q) { + var _ = A.unstable_now(); + switch (typeof q == "object" && q !== null ? (q = q.delay, + q = typeof q == "number" && 0 < q ? _ + q : _) : q = _, + T) { + case 1: + var rt = -1; + break; + case 2: + rt = 250; + break; + case 5: + rt = 1073741823; + break; + case 4: + rt = 1e4; + break; + default: + rt = 5e3 + } + return rt = q + rt, + T = { + id: n++, + callback: z, + priorityLevel: T, + startTime: q, + expirationTime: rt, + sortIndex: -1 + }, + q > _ ? (T.sortIndex = q, + t(m, T), + a(p) === null && T === a(m) && (R ? (W(G), + G = -1) : R = !0, + It(Y, q - _))) : (T.sortIndex = rt, + t(p, T), + U || h || (U = !0, + B || (B = !0, + tt()))), + T + } + , + A.unstable_shouldYield = v, + A.unstable_wrapCallback = function(T) { + var z = b; + return function() { + var q = b; + b = z; + try { + return T.apply(this, arguments) + } finally { + b = q + } + } + } + } + )(Hb)), + Hb +} +var fW; +function $y() { + return fW || (fW = 1, + Xb.exports = _y()), + Xb.exports +} +var Pb = { + exports: {} +} + , ca = {}; +/** + * @license React + * react-dom.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var vW; +function tL() { + if (vW) + return ca; + vW = 1; + var A = Xp(); + function t(p) { + var m = "https://react.dev/errors/" + p; + if (1 < arguments.length) { + m += "?args[]=" + encodeURIComponent(arguments[1]); + for (var n = 2; n < arguments.length; n++) + m += "&args[]=" + encodeURIComponent(arguments[n]) + } + return "Minified React error #" + p + "; visit " + m + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + } + function a() {} + var S = { + d: { + f: a, + r: function() { + throw Error(t(522)) + }, + D: a, + C: a, + L: a, + m: a, + X: a, + S: a, + M: a + }, + p: 0, + findDOMNode: null + } + , l = Symbol.for("react.portal"); + function s(p, m, n) { + var J = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; + return { + $$typeof: l, + key: J == null ? null : "" + J, + children: p, + containerInfo: m, + implementation: n + } + } + var E = A.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; + function k(p, m) { + if (p === "font") + return ""; + if (typeof m == "string") + return m === "use-credentials" ? m : "" + } + return ca.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = S, + ca.createPortal = function(p, m) { + var n = 2 < arguments.length && arguments[2] !== void 0 ? arguments[2] : null; + if (!m || m.nodeType !== 1 && m.nodeType !== 9 && m.nodeType !== 11) + throw Error(t(299)); + return s(p, m, null, n) + } + , + ca.flushSync = function(p) { + var m = E.T + , n = S.p; + try { + if (E.T = null, + S.p = 2, + p) + return p() + } finally { + E.T = m, + S.p = n, + S.d.f() + } + } + , + ca.preconnect = function(p, m) { + typeof p == "string" && (m ? (m = m.crossOrigin, + m = typeof m == "string" ? m === "use-credentials" ? m : "" : void 0) : m = null, + S.d.C(p, m)) + } + , + ca.prefetchDNS = function(p) { + typeof p == "string" && S.d.D(p) + } + , + ca.preinit = function(p, m) { + if (typeof p == "string" && m && typeof m.as == "string") { + var n = m.as + , J = k(n, m.crossOrigin) + , b = typeof m.integrity == "string" ? m.integrity : void 0 + , h = typeof m.fetchPriority == "string" ? m.fetchPriority : void 0; + n === "style" ? S.d.S(p, typeof m.precedence == "string" ? m.precedence : void 0, { + crossOrigin: J, + integrity: b, + fetchPriority: h + }) : n === "script" && S.d.X(p, { + crossOrigin: J, + integrity: b, + fetchPriority: h, + nonce: typeof m.nonce == "string" ? m.nonce : void 0 + }) + } + } + , + ca.preinitModule = function(p, m) { + if (typeof p == "string") + if (typeof m == "object" && m !== null) { + if (m.as == null || m.as === "script") { + var n = k(m.as, m.crossOrigin); + S.d.M(p, { + crossOrigin: n, + integrity: typeof m.integrity == "string" ? m.integrity : void 0, + nonce: typeof m.nonce == "string" ? m.nonce : void 0 + }) + } + } else + m == null && S.d.M(p) + } + , + ca.preload = function(p, m) { + if (typeof p == "string" && typeof m == "object" && m !== null && typeof m.as == "string") { + var n = m.as + , J = k(n, m.crossOrigin); + S.d.L(p, n, { + crossOrigin: J, + integrity: typeof m.integrity == "string" ? m.integrity : void 0, + nonce: typeof m.nonce == "string" ? m.nonce : void 0, + type: typeof m.type == "string" ? m.type : void 0, + fetchPriority: typeof m.fetchPriority == "string" ? m.fetchPriority : void 0, + referrerPolicy: typeof m.referrerPolicy == "string" ? m.referrerPolicy : void 0, + imageSrcSet: typeof m.imageSrcSet == "string" ? m.imageSrcSet : void 0, + imageSizes: typeof m.imageSizes == "string" ? m.imageSizes : void 0, + media: typeof m.media == "string" ? m.media : void 0 + }) + } + } + , + ca.preloadModule = function(p, m) { + if (typeof p == "string") + if (m) { + var n = k(m.as, m.crossOrigin); + S.d.m(p, { + as: typeof m.as == "string" && m.as !== "script" ? m.as : void 0, + crossOrigin: n, + integrity: typeof m.integrity == "string" ? m.integrity : void 0 + }) + } else + S.d.m(p) + } + , + ca.requestFormReset = function(p) { + S.d.r(p) + } + , + ca.unstable_batchedUpdates = function(p, m) { + return p(m) + } + , + ca.useFormState = function(p, m, n) { + return E.H.useFormState(p, m, n) + } + , + ca.useFormStatus = function() { + return E.H.useHostTransitionStatus() + } + , + ca.version = "19.2.1", + ca +} +var XW; +function VY() { + if (XW) + return Pb.exports; + XW = 1; + function A() { + if (!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > "u" || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE != "function")) + try { + __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(A) + } catch (t) { + console.error(t) + } + } + return A(), + Pb.exports = tL(), + Pb.exports +} +/** + * @license React + * react-dom-client.production.js + * + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +var HW; +function AL() { + if (HW) + return Kk; + HW = 1; + var A = $y() + , t = Xp() + , a = VY(); + function S(I) { + var e = "https://react.dev/errors/" + I; + if (1 < arguments.length) { + e += "?args[]=" + encodeURIComponent(arguments[1]); + for (var r = 2; r < arguments.length; r++) + e += "&args[]=" + encodeURIComponent(arguments[r]) + } + return "Minified React error #" + I + "; visit " + e + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings." + } + function l(I) { + return !(!I || I.nodeType !== 1 && I.nodeType !== 9 && I.nodeType !== 11) + } + function s(I) { + var e = I + , r = I; + if (I.alternate) + for (; e.return; ) + e = e.return; + else { + I = e; + do + e = I, + (e.flags & 4098) !== 0 && (r = e.return), + I = e.return; + while (I) + } + return e.tag === 3 ? r : null + } + function E(I) { + if (I.tag === 13) { + var e = I.memoizedState; + if (e === null && (I = I.alternate, + I !== null && (e = I.memoizedState)), + e !== null) + return e.dehydrated + } + return null + } + function k(I) { + if (I.tag === 31) { + var e = I.memoizedState; + if (e === null && (I = I.alternate, + I !== null && (e = I.memoizedState)), + e !== null) + return e.dehydrated + } + return null + } + function p(I) { + if (s(I) !== I) + throw Error(S(188)) + } + function m(I) { + var e = I.alternate; + if (!e) { + if (e = s(I), + e === null) + throw Error(S(188)); + return e !== I ? null : I + } + for (var r = I, C = e; ; ) { + var o = r.return; + if (o === null) + break; + var Q = o.alternate; + if (Q === null) { + if (C = o.return, + C !== null) { + r = C; + continue + } + break + } + if (o.child === Q.child) { + for (Q = o.child; Q; ) { + if (Q === r) + return p(o), + I; + if (Q === C) + return p(o), + e; + Q = Q.sibling + } + throw Error(S(188)) + } + if (r.return !== C.return) + r = o, + C = Q; + else { + for (var K = !1, N = o.child; N; ) { + if (N === r) { + K = !0, + r = o, + C = Q; + break + } + if (N === C) { + K = !0, + C = o, + r = Q; + break + } + N = N.sibling + } + if (!K) { + for (N = Q.child; N; ) { + if (N === r) { + K = !0, + r = Q, + C = o; + break + } + if (N === C) { + K = !0, + C = Q, + r = o; + break + } + N = N.sibling + } + if (!K) + throw Error(S(189)) + } + } + if (r.alternate !== C) + throw Error(S(190)) + } + if (r.tag !== 3) + throw Error(S(188)); + return r.stateNode.current === r ? I : e + } + function n(I) { + var e = I.tag; + if (e === 5 || e === 26 || e === 27 || e === 6) + return I; + for (I = I.child; I !== null; ) { + if (e = n(I), + e !== null) + return e; + I = I.sibling + } + return null + } + var J = Object.assign + , b = Symbol.for("react.element") + , h = Symbol.for("react.transitional.element") + , U = Symbol.for("react.portal") + , R = Symbol.for("react.fragment") + , Z = Symbol.for("react.strict_mode") + , g = Symbol.for("react.profiler") + , W = Symbol.for("react.consumer") + , c = Symbol.for("react.context") + , u = Symbol.for("react.forward_ref") + , Y = Symbol.for("react.suspense") + , B = Symbol.for("react.suspense_list") + , G = Symbol.for("react.memo") + , M = Symbol.for("react.lazy") + , L = Symbol.for("react.activity") + , v = Symbol.for("react.memo_cache_sentinel") + , at = Symbol.iterator; + function tt(I) { + return I === null || typeof I != "object" ? null : (I = at && I[at] || I["@@iterator"], + typeof I == "function" ? I : null) + } + var y = Symbol.for("react.client.reference"); + function St(I) { + if (I == null) + return null; + if (typeof I == "function") + return I.$$typeof === y ? null : I.displayName || I.name || null; + if (typeof I == "string") + return I; + switch (I) { + case R: + return "Fragment"; + case g: + return "Profiler"; + case Z: + return "StrictMode"; + case Y: + return "Suspense"; + case B: + return "SuspenseList"; + case L: + return "Activity" + } + if (typeof I == "object") + switch (I.$$typeof) { + case U: + return "Portal"; + case c: + return I.displayName || "Context"; + case W: + return (I._context.displayName || "Context") + ".Consumer"; + case u: + var e = I.render; + return I = I.displayName, + I || (I = e.displayName || e.name || "", + I = I !== "" ? "ForwardRef(" + I + ")" : "ForwardRef"), + I; + case G: + return e = I.displayName || null, + e !== null ? e : St(I.type) || "Memo"; + case M: + e = I._payload, + I = I._init; + try { + return St(I(e)) + } catch {} + } + return null + } + var It = Array.isArray + , T = t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE + , z = a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE + , q = { + pending: !1, + data: null, + method: null, + action: null + } + , _ = [] + , rt = -1; + function j(I) { + return { + current: I + } + } + function H(I) { + 0 > rt || (I.current = _[rt], + _[rt] = null, + rt--) + } + function V(I, e) { + rt++, + _[rt] = I.current, + I.current = e + } + var P = j(null) + , et = j(null) + , Ct = j(null) + , lt = j(null); + function nt(I, e) { + switch (V(Ct, e), + V(et, I), + V(P, null), + e.nodeType) { + case 9: + case 11: + I = (I = e.documentElement) && (I = I.namespaceURI) ? vg(I) : 0; + break; + default: + if (I = e.tagName, + e = e.namespaceURI) + e = vg(e), + I = Xg(e, I); + else + switch (I) { + case "svg": + I = 1; + break; + case "math": + I = 2; + break; + default: + I = 0 + } + } + H(P), + V(P, I) + } + function Gt() { + H(P), + H(et), + H(Ct) + } + function qt(I) { + I.memoizedState !== null && V(lt, I); + var e = P.current + , r = Xg(e, I.type); + e !== r && (V(et, I), + V(P, r)) + } + function zt(I) { + et.current === I && (H(P), + H(et)), + lt.current === I && (H(lt), + Uk._currentValue = q) + } + var ft, Sa; + function MA(I) { + if (ft === void 0) + try { + throw Error() + } catch (r) { + var e = r.stack.trim().match(/\n( *(at )?)/); + ft = e && e[1] || "", + Sa = -1 < r.stack.indexOf(` + at`) ? " ()" : -1 < r.stack.indexOf("@") ? "@unknown:0:0" : "" + } + return ` +` + ft + I + Sa + } + var XS = !1; + function cS(I, e) { + if (!I || XS) + return ""; + XS = !0; + var r = Error.prepareStackTrace; + Error.prepareStackTrace = void 0; + try { + var C = { + DetermineComponentFrameRoot: function() { + try { + if (e) { + var Et = function() { + throw Error() + }; + if (Object.defineProperty(Et.prototype, "props", { + set: function() { + throw Error() + } + }), + typeof Reflect == "object" && Reflect.construct) { + try { + Reflect.construct(Et, []) + } catch (At) { + var X = At + } + Reflect.construct(I, [], Et) + } else { + try { + Et.call() + } catch (At) { + X = At + } + I.call(Et.prototype) + } + } else { + try { + throw Error() + } catch (At) { + X = At + } + (Et = I()) && typeof Et.catch == "function" && Et.catch(function() {}) + } + } catch (At) { + if (At && X && typeof At.stack == "string") + return [At.stack, X.stack] + } + return [null, null] + } + }; + C.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; + var o = Object.getOwnPropertyDescriptor(C.DetermineComponentFrameRoot, "name"); + o && o.configurable && Object.defineProperty(C.DetermineComponentFrameRoot, "name", { + value: "DetermineComponentFrameRoot" + }); + var Q = C.DetermineComponentFrameRoot() + , K = Q[0] + , N = Q[1]; + if (K && N) { + var F = K.split(` +`) + , f = N.split(` +`); + for (o = C = 0; C < F.length && !F[C].includes("DetermineComponentFrameRoot"); ) + C++; + for (; o < f.length && !f[o].includes("DetermineComponentFrameRoot"); ) + o++; + if (C === F.length || o === f.length) + for (C = F.length - 1, + o = f.length - 1; 1 <= C && 0 <= o && F[C] !== f[o]; ) + o--; + for (; 1 <= C && 0 <= o; C--, + o--) + if (F[C] !== f[o]) { + if (C !== 1 || o !== 1) + do + if (C--, + o--, + 0 > o || F[C] !== f[o]) { + var it = ` +` + F[C].replace(" at new ", " at "); + return I.displayName && it.includes("") && (it = it.replace("", I.displayName)), + it + } + while (1 <= C && 0 <= o); + break + } + } + } finally { + XS = !1, + Error.prepareStackTrace = r + } + return (r = I ? I.displayName || I.name : "") ? MA(r) : "" + } + function kS(I, e) { + switch (I.tag) { + case 26: + case 27: + case 5: + return MA(I.type); + case 16: + return MA("Lazy"); + case 13: + return I.child !== e && e !== null ? MA("Suspense Fallback") : MA("Suspense"); + case 19: + return MA("SuspenseList"); + case 0: + case 15: + return cS(I.type, !1); + case 11: + return cS(I.type.render, !1); + case 1: + return cS(I.type, !0); + case 31: + return MA("Activity"); + default: + return "" + } + } + function qs(I) { + try { + var e = "" + , r = null; + do + e += kS(I, r), + r = I, + I = I.return; + while (I); + return e + } catch (C) { + return ` +Error generating stack: ` + C.message + ` +` + C.stack + } + } + var Ta = Object.prototype.hasOwnProperty + , Fs = A.unstable_scheduleCallback + , xs = A.unstable_cancelCallback + , ka = A.unstable_shouldYield + , KS = A.unstable_requestPaint + , ia = A.unstable_now + , Te = A.unstable_getCurrentPriorityLevel + , xi = A.unstable_ImmediatePriority + , HI = A.unstable_UserBlockingPriority + , yi = A.unstable_NormalPriority + , ys = A.unstable_LowPriority + , HS = A.unstable_IdlePriority + , PI = A.log + , ri = A.unstable_setDisableYieldValue + , Li = null + , ba = null; + function pS(I) { + if (typeof PI == "function" && ri(I), + ba && typeof ba.setStrictMode == "function") + try { + ba.setStrictMode(Li, I) + } catch {} + } + var la = Math.clz32 ? Math.clz32 : _t + , je = Math.log + , Ft = Math.LN2; + function _t(I) { + return I >>>= 0, + I === 0 ? 32 : 31 - (je(I) / Ft | 0) | 0 + } + var Nt = 256 + , AA = 262144 + , LA = 4194304; + function xt(I) { + var e = I & 42; + if (e !== 0) + return e; + switch (I & -I) { + 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 I & 261888; + case 262144: + case 524288: + case 1048576: + case 2097152: + return I & 3932160; + case 4194304: + case 8388608: + case 16777216: + case 33554432: + return I & 62914560; + case 67108864: + return 67108864; + case 134217728: + return 134217728; + case 268435456: + return 268435456; + case 536870912: + return 536870912; + case 1073741824: + return 0; + default: + return I + } + } + function Mt(I, e, r) { + var C = I.pendingLanes; + if (C === 0) + return 0; + var o = 0 + , Q = I.suspendedLanes + , K = I.pingedLanes; + I = I.warmLanes; + var N = C & 134217727; + return N !== 0 ? (C = N & ~Q, + C !== 0 ? o = xt(C) : (K &= N, + K !== 0 ? o = xt(K) : r || (r = N & ~I, + r !== 0 && (o = xt(r))))) : (N = C & ~Q, + N !== 0 ? o = xt(N) : K !== 0 ? o = xt(K) : r || (r = C & ~I, + r !== 0 && (o = xt(r)))), + o === 0 ? 0 : e !== 0 && e !== o && (e & Q) === 0 && (Q = o & -o, + r = e & -e, + Q >= r || Q === 32 && (r & 4194048) !== 0) ? e : o + } + function RA(I, e) { + return (I.pendingLanes & ~(I.suspendedLanes & ~I.pingedLanes) & e) === 0 + } + function vA(I, e) { + switch (I) { + 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 XA() { + var I = LA; + return LA <<= 1, + (LA & 62914560) === 0 && (LA = 4194304), + I + } + function GS(I) { + for (var e = [], r = 0; 31 > r; r++) + e.push(I); + return e + } + function YA(I, e) { + I.pendingLanes |= e, + e !== 268435456 && (I.suspendedLanes = 0, + I.pingedLanes = 0, + I.warmLanes = 0) + } + function fa(I, e, r, C, o, Q) { + var K = I.pendingLanes; + I.pendingLanes = r, + I.suspendedLanes = 0, + I.pingedLanes = 0, + I.warmLanes = 0, + I.expiredLanes &= r, + I.entangledLanes &= r, + I.errorRecoveryDisabledLanes &= r, + I.shellSuspendCounter = 0; + var N = I.entanglements + , F = I.expirationTimes + , f = I.hiddenUpdates; + for (r = K & ~r; 0 < r; ) { + var it = 31 - la(r) + , Et = 1 << it; + N[it] = 0, + F[it] = -1; + var X = f[it]; + if (X !== null) + for (f[it] = null, + it = 0; it < X.length; it++) { + var At = X[it]; + At !== null && (At.lane &= -536870913) + } + r &= ~Et + } + C !== 0 && Ls(I, C, 0), + Q !== 0 && o === 0 && I.tag !== 0 && (I.suspendedLanes |= Q & ~(K & ~e)) + } + function Ls(I, e, r) { + I.pendingLanes |= e, + I.suspendedLanes &= ~e; + var C = 31 - la(e); + I.entangledLanes |= e, + I.entanglements[C] = I.entanglements[C] | 1073741824 | r & 261930 + } + function va(I, e) { + var r = I.entangledLanes |= e; + for (I = I.entanglements; r; ) { + var C = 31 - la(r) + , o = 1 << C; + o & e | I[C] & e && (I[C] |= e), + r &= ~o + } + } + function Xa(I, e) { + var r = e & -e; + return r = (r & 42) !== 0 ? 1 : _I(r), + (r & (I.suspendedLanes | e)) !== 0 ? 0 : r + } + function _I(I) { + switch (I) { + case 2: + I = 1; + break; + case 8: + I = 4; + break; + case 32: + I = 16; + break; + case 256: + case 512: + case 1024: + case 2048: + case 4096: + case 8192: + case 16384: + case 32768: + case 65536: + case 131072: + case 262144: + case 524288: + case 1048576: + case 2097152: + case 4194304: + case 8388608: + case 16777216: + case 33554432: + I = 128; + break; + case 268435456: + I = 134217728; + break; + default: + I = 0 + } + return I + } + function PS(I) { + return I &= -I, + 2 < I ? 8 < I ? (I & 134217727) !== 0 ? 32 : 268435456 : 8 : 2 + } + function N2() { + var I = z.p; + return I !== 0 ? I : (I = window.event, + I === void 0 ? 32 : oW(I.type)) + } + function BU(I, e) { + var r = z.p; + try { + return z.p = I, + e() + } finally { + z.p = r + } + } + var Wl = Math.random().toString(36).slice(2) + , oa = "__reactFiber$" + Wl + , Ha = "__reactProps$" + Wl + , $I = "__reactContainer$" + Wl + , u2 = "__reactEvents$" + Wl + , cj = "__reactListeners$" + Wl + , Kj = "__reactHandles$" + Wl + , TU = "__reactResources$" + Wl + , qe = "__reactMarker$" + Wl; + function M2(I) { + delete I[oa], + delete I[Ha], + delete I[u2], + delete I[cj], + delete I[Kj] + } + function tE(I) { + var e = I[oa]; + if (e) + return e; + for (var r = I.parentNode; r; ) { + if (e = r[$I] || r[oa]) { + if (r = e.alternate, + e.child !== null || r !== null && r.child !== null) + for (I = aW(I); I !== null; ) { + if (r = I[oa]) + return r; + I = aW(I) + } + return e + } + I = r, + r = I.parentNode + } + return null + } + function AE(I) { + if (I = I[oa] || I[$I]) { + var e = I.tag; + if (e === 5 || e === 6 || e === 13 || e === 31 || e === 26 || e === 27 || e === 3) + return I + } + return null + } + function Fe(I) { + var e = I.tag; + if (e === 5 || e === 26 || e === 27 || e === 6) + return I.stateNode; + throw Error(S(33)) + } + function aE(I) { + var e = I[TU]; + return e || (e = I[TU] = { + hoistableStyles: new Map, + hoistableScripts: new Map + }), + e + } + function pa(I) { + I[qe] = !0 + } + var jU = new Set + , qU = {}; + function ws(I, e) { + SE(I, e), + SE(I + "Capture", e) + } + function SE(I, e) { + for (qU[I] = e, + I = 0; I < e.length; I++) + jU.add(e[I]) + } + var Gj = RegExp("^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$") + , FU = {} + , xU = {}; + function Yj(I) { + return Ta.call(xU, I) ? !0 : Ta.call(FU, I) ? !1 : Gj.test(I) ? xU[I] = !0 : (FU[I] = !0, + !1) + } + function br(I, e, r) { + if (Yj(e)) + if (r === null) + I.removeAttribute(e); + else { + switch (typeof r) { + case "undefined": + case "function": + case "symbol": + I.removeAttribute(e); + return; + case "boolean": + var C = e.toLowerCase().slice(0, 5); + if (C !== "data-" && C !== "aria-") { + I.removeAttribute(e); + return + } + } + I.setAttribute(e, "" + r) + } + } + function or(I, e, r) { + if (r === null) + I.removeAttribute(e); + else { + switch (typeof r) { + case "undefined": + case "function": + case "symbol": + case "boolean": + I.removeAttribute(e); + return + } + I.setAttribute(e, "" + r) + } + } + function wi(I, e, r, C) { + if (C === null) + I.removeAttribute(r); + else { + switch (typeof C) { + case "undefined": + case "function": + case "symbol": + case "boolean": + I.removeAttribute(r); + return + } + I.setAttributeNS(e, r, "" + C) + } + } + function YS(I) { + switch (typeof I) { + case "bigint": + case "boolean": + case "number": + case "string": + case "undefined": + return I; + case "object": + return I; + default: + return "" + } + } + function yU(I) { + var e = I.type; + return (I = I.nodeName) && I.toLowerCase() === "input" && (e === "checkbox" || e === "radio") + } + function Nj(I, e, r) { + var C = Object.getOwnPropertyDescriptor(I.constructor.prototype, e); + if (!I.hasOwnProperty(e) && typeof C < "u" && typeof C.get == "function" && typeof C.set == "function") { + var o = C.get + , Q = C.set; + return Object.defineProperty(I, e, { + configurable: !0, + get: function() { + return o.call(this) + }, + set: function(K) { + r = "" + K, + Q.call(this, K) + } + }), + Object.defineProperty(I, e, { + enumerable: C.enumerable + }), + { + getValue: function() { + return r + }, + setValue: function(K) { + r = "" + K + }, + stopTracking: function() { + I._valueTracker = null, + delete I[e] + } + } + } + } + function B2(I) { + if (!I._valueTracker) { + var e = yU(I) ? "checked" : "value"; + I._valueTracker = Nj(I, e, "" + I[e]) + } + } + function LU(I) { + if (!I) + return !1; + var e = I._valueTracker; + if (!e) + return !0; + var r = e.getValue() + , C = ""; + return I && (C = yU(I) ? I.checked ? "true" : "false" : I.value), + I = C, + I !== r ? (e.setValue(I), + !0) : !1 + } + function hr(I) { + if (I = I || (typeof document < "u" ? document : void 0), + typeof I > "u") + return null; + try { + return I.activeElement || I.body + } catch { + return I.body + } + } + var uj = /[\n"\\]/g; + function NS(I) { + return I.replace(uj, function(e) { + return "\\" + e.charCodeAt(0).toString(16) + " " + }) + } + function T2(I, e, r, C, o, Q, K, N) { + I.name = "", + K != null && typeof K != "function" && typeof K != "symbol" && typeof K != "boolean" ? I.type = K : I.removeAttribute("type"), + e != null ? K === "number" ? (e === 0 && I.value === "" || I.value != e) && (I.value = "" + YS(e)) : I.value !== "" + YS(e) && (I.value = "" + YS(e)) : K !== "submit" && K !== "reset" || I.removeAttribute("value"), + e != null ? j2(I, K, YS(e)) : r != null ? j2(I, K, YS(r)) : C != null && I.removeAttribute("value"), + o == null && Q != null && (I.defaultChecked = !!Q), + o != null && (I.checked = o && typeof o != "function" && typeof o != "symbol"), + N != null && typeof N != "function" && typeof N != "symbol" && typeof N != "boolean" ? I.name = "" + YS(N) : I.removeAttribute("name") + } + function wU(I, e, r, C, o, Q, K, N) { + if (Q != null && typeof Q != "function" && typeof Q != "symbol" && typeof Q != "boolean" && (I.type = Q), + e != null || r != null) { + if (!(Q !== "submit" && Q !== "reset" || e != null)) { + B2(I); + return + } + r = r != null ? "" + YS(r) : "", + e = e != null ? "" + YS(e) : r, + N || e === I.value || (I.value = e), + I.defaultValue = e + } + C = C ?? o, + C = typeof C != "function" && typeof C != "symbol" && !!C, + I.checked = N ? I.checked : !!C, + I.defaultChecked = !!C, + K != null && typeof K != "function" && typeof K != "symbol" && typeof K != "boolean" && (I.name = K), + B2(I) + } + function j2(I, e, r) { + e === "number" && hr(I.ownerDocument) === I || I.defaultValue === "" + r || (I.defaultValue = "" + r) + } + function iE(I, e, r, C) { + if (I = I.options, + e) { + e = {}; + for (var o = 0; o < r.length; o++) + e["$" + r[o]] = !0; + for (r = 0; r < I.length; r++) + o = e.hasOwnProperty("$" + I[r].value), + I[r].selected !== o && (I[r].selected = o), + o && C && (I[r].defaultSelected = !0) + } else { + for (r = "" + YS(r), + e = null, + o = 0; o < I.length; o++) { + if (I[o].value === r) { + I[o].selected = !0, + C && (I[o].defaultSelected = !0); + return + } + e !== null || I[o].disabled || (e = I[o]) + } + e !== null && (e.selected = !0) + } + } + function zU(I, e, r) { + if (e != null && (e = "" + YS(e), + e !== I.value && (I.value = e), + r == null)) { + I.defaultValue !== e && (I.defaultValue = e); + return + } + I.defaultValue = r != null ? "" + YS(r) : "" + } + function OU(I, e, r, C) { + if (e == null) { + if (C != null) { + if (r != null) + throw Error(S(92)); + if (It(C)) { + if (1 < C.length) + throw Error(S(93)); + C = C[0] + } + r = C + } + r == null && (r = ""), + e = r + } + r = YS(e), + I.defaultValue = r, + C = I.textContent, + C === r && C !== "" && C !== null && (I.value = C), + B2(I) + } + function lE(I, e) { + if (e) { + var r = I.firstChild; + if (r && r === I.lastChild && r.nodeType === 3) { + r.nodeValue = e; + return + } + } + I.textContent = e + } + var Mj = new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" ")); + function VU(I, e, r) { + var C = e.indexOf("--") === 0; + r == null || typeof r == "boolean" || r === "" ? C ? I.setProperty(e, "") : e === "float" ? I.cssFloat = "" : I[e] = "" : C ? I.setProperty(e, r) : typeof r != "number" || r === 0 || Mj.has(e) ? e === "float" ? I.cssFloat = r : I[e] = ("" + r).trim() : I[e] = r + "px" + } + function DU(I, e, r) { + if (e != null && typeof e != "object") + throw Error(S(62)); + if (I = I.style, + r != null) { + for (var C in r) + !r.hasOwnProperty(C) || e != null && e.hasOwnProperty(C) || (C.indexOf("--") === 0 ? I.setProperty(C, "") : C === "float" ? I.cssFloat = "" : I[C] = ""); + for (var o in e) + C = e[o], + e.hasOwnProperty(o) && r[o] !== C && VU(I, o, C) + } else + for (var Q in e) + e.hasOwnProperty(Q) && VU(I, Q, e[Q]) + } + function q2(I) { + if (I.indexOf("-") === -1) + return !1; + switch (I) { + case "annotation-xml": + case "color-profile": + case "font-face": + case "font-face-src": + case "font-face-uri": + case "font-face-format": + case "font-face-name": + case "missing-glyph": + return !1; + default: + return !0 + } + } + var Bj = new Map([["acceptCharset", "accept-charset"], ["htmlFor", "for"], ["httpEquiv", "http-equiv"], ["crossOrigin", "crossorigin"], ["accentHeight", "accent-height"], ["alignmentBaseline", "alignment-baseline"], ["arabicForm", "arabic-form"], ["baselineShift", "baseline-shift"], ["capHeight", "cap-height"], ["clipPath", "clip-path"], ["clipRule", "clip-rule"], ["colorInterpolation", "color-interpolation"], ["colorInterpolationFilters", "color-interpolation-filters"], ["colorProfile", "color-profile"], ["colorRendering", "color-rendering"], ["dominantBaseline", "dominant-baseline"], ["enableBackground", "enable-background"], ["fillOpacity", "fill-opacity"], ["fillRule", "fill-rule"], ["floodColor", "flood-color"], ["floodOpacity", "flood-opacity"], ["fontFamily", "font-family"], ["fontSize", "font-size"], ["fontSizeAdjust", "font-size-adjust"], ["fontStretch", "font-stretch"], ["fontStyle", "font-style"], ["fontVariant", "font-variant"], ["fontWeight", "font-weight"], ["glyphName", "glyph-name"], ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], ["glyphOrientationVertical", "glyph-orientation-vertical"], ["horizAdvX", "horiz-adv-x"], ["horizOriginX", "horiz-origin-x"], ["imageRendering", "image-rendering"], ["letterSpacing", "letter-spacing"], ["lightingColor", "lighting-color"], ["markerEnd", "marker-end"], ["markerMid", "marker-mid"], ["markerStart", "marker-start"], ["overlinePosition", "overline-position"], ["overlineThickness", "overline-thickness"], ["paintOrder", "paint-order"], ["panose-1", "panose-1"], ["pointerEvents", "pointer-events"], ["renderingIntent", "rendering-intent"], ["shapeRendering", "shape-rendering"], ["stopColor", "stop-color"], ["stopOpacity", "stop-opacity"], ["strikethroughPosition", "strikethrough-position"], ["strikethroughThickness", "strikethrough-thickness"], ["strokeDasharray", "stroke-dasharray"], ["strokeDashoffset", "stroke-dashoffset"], ["strokeLinecap", "stroke-linecap"], ["strokeLinejoin", "stroke-linejoin"], ["strokeMiterlimit", "stroke-miterlimit"], ["strokeOpacity", "stroke-opacity"], ["strokeWidth", "stroke-width"], ["textAnchor", "text-anchor"], ["textDecoration", "text-decoration"], ["textRendering", "text-rendering"], ["transformOrigin", "transform-origin"], ["underlinePosition", "underline-position"], ["underlineThickness", "underline-thickness"], ["unicodeBidi", "unicode-bidi"], ["unicodeRange", "unicode-range"], ["unitsPerEm", "units-per-em"], ["vAlphabetic", "v-alphabetic"], ["vHanging", "v-hanging"], ["vIdeographic", "v-ideographic"], ["vMathematical", "v-mathematical"], ["vectorEffect", "vector-effect"], ["vertAdvY", "vert-adv-y"], ["vertOriginX", "vert-origin-x"], ["vertOriginY", "vert-origin-y"], ["wordSpacing", "word-spacing"], ["writingMode", "writing-mode"], ["xmlnsXlink", "xmlns:xlink"], ["xHeight", "x-height"]]) + , Tj = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i; + function Qr(I) { + return Tj.test("" + I) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : I + } + function zi() {} + var F2 = null; + function x2(I) { + return I = I.target || I.srcElement || window, + I.correspondingUseElement && (I = I.correspondingUseElement), + I.nodeType === 3 ? I.parentNode : I + } + var sE = null + , IE = null; + function fU(I) { + var e = AE(I); + if (e && (I = e.stateNode)) { + var r = I[Ha] || null; + t: switch (I = e.stateNode, + e.type) { + case "input": + if (T2(I, r.value, r.defaultValue, r.defaultValue, r.checked, r.defaultChecked, r.type, r.name), + e = r.name, + r.type === "radio" && e != null) { + for (r = I; r.parentNode; ) + r = r.parentNode; + for (r = r.querySelectorAll('input[name="' + NS("" + e) + '"][type="radio"]'), + e = 0; e < r.length; e++) { + var C = r[e]; + if (C !== I && C.form === I.form) { + var o = C[Ha] || null; + if (!o) + throw Error(S(90)); + T2(C, o.value, o.defaultValue, o.defaultValue, o.checked, o.defaultChecked, o.type, o.name) + } + } + for (e = 0; e < r.length; e++) + C = r[e], + C.form === I.form && LU(C) + } + break t; + case "textarea": + zU(I, r.value, r.defaultValue); + break t; + case "select": + e = r.value, + e != null && iE(I, !!r.multiple, e, !1) + } + } + } + var y2 = !1; + function vU(I, e, r) { + if (y2) + return I(e, r); + y2 = !0; + try { + var C = I(e); + return C + } finally { + if (y2 = !1, + (sE !== null || IE !== null) && (Im(), + sE && (e = sE, + I = IE, + IE = sE = null, + fU(e), + I))) + for (e = 0; e < I.length; e++) + fU(I[e]) + } + } + function xe(I, e) { + var r = I.stateNode; + if (r === null) + return null; + var C = r[Ha] || null; + if (C === null) + return null; + r = C[e]; + t: switch (e) { + case "onClick": + case "onClickCapture": + case "onDoubleClick": + case "onDoubleClickCapture": + case "onMouseDown": + case "onMouseDownCapture": + case "onMouseMove": + case "onMouseMoveCapture": + case "onMouseUp": + case "onMouseUpCapture": + case "onMouseEnter": + (C = !C.disabled) || (I = I.type, + C = !(I === "button" || I === "input" || I === "select" || I === "textarea")), + I = !C; + break t; + default: + I = !1 + } + if (I) + return null; + if (r && typeof r != "function") + throw Error(S(231, e, typeof r)); + return r + } + var Oi = !(typeof window > "u" || typeof window.document > "u" || typeof window.document.createElement > "u") + , L2 = !1; + if (Oi) + try { + var ye = {}; + Object.defineProperty(ye, "passive", { + get: function() { + L2 = !0 + } + }), + window.addEventListener("test", ye, ye), + window.removeEventListener("test", ye, ye) + } catch { + L2 = !1 + } + var cl = null + , w2 = null + , Rr = null; + function XU() { + if (Rr) + return Rr; + var I, e = w2, r = e.length, C, o = "value" in cl ? cl.value : cl.textContent, Q = o.length; + for (I = 0; I < r && e[I] === o[I]; I++) + ; + var K = r - I; + for (C = 1; C <= K && e[r - C] === o[Q - C]; C++) + ; + return Rr = o.slice(I, 1 < C ? 1 - C : void 0) + } + function Ur(I) { + var e = I.keyCode; + return "charCode" in I ? (I = I.charCode, + I === 0 && e === 13 && (I = 13)) : I = e, + I === 10 && (I = 13), + 32 <= I || I === 13 ? I : 0 + } + function Zr() { + return !0 + } + function HU() { + return !1 + } + function Pa(I) { + function e(r, C, o, Q, K) { + this._reactName = r, + this._targetInst = o, + this.type = C, + this.nativeEvent = Q, + this.target = K, + this.currentTarget = null; + for (var N in I) + I.hasOwnProperty(N) && (r = I[N], + this[N] = r ? r(Q) : Q[N]); + return this.isDefaultPrevented = (Q.defaultPrevented != null ? Q.defaultPrevented : Q.returnValue === !1) ? Zr : HU, + this.isPropagationStopped = HU, + this + } + return J(e.prototype, { + preventDefault: function() { + this.defaultPrevented = !0; + var r = this.nativeEvent; + r && (r.preventDefault ? r.preventDefault() : typeof r.returnValue != "unknown" && (r.returnValue = !1), + this.isDefaultPrevented = Zr) + }, + stopPropagation: function() { + var r = this.nativeEvent; + r && (r.stopPropagation ? r.stopPropagation() : typeof r.cancelBubble != "unknown" && (r.cancelBubble = !0), + this.isPropagationStopped = Zr) + }, + persist: function() {}, + isPersistent: Zr + }), + e + } + var zs = { + eventPhase: 0, + bubbles: 0, + cancelable: 0, + timeStamp: function(I) { + return I.timeStamp || Date.now() + }, + defaultPrevented: 0, + isTrusted: 0 + }, dr = Pa(zs), Le = J({}, zs, { + view: 0, + detail: 0 + }), jj = Pa(Le), z2, O2, we, gr = J({}, Le, { + screenX: 0, + screenY: 0, + clientX: 0, + clientY: 0, + pageX: 0, + pageY: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + getModifierState: D2, + button: 0, + buttons: 0, + relatedTarget: function(I) { + return I.relatedTarget === void 0 ? I.fromElement === I.srcElement ? I.toElement : I.fromElement : I.relatedTarget + }, + movementX: function(I) { + return "movementX" in I ? I.movementX : (I !== we && (we && I.type === "mousemove" ? (z2 = I.screenX - we.screenX, + O2 = I.screenY - we.screenY) : O2 = z2 = 0, + we = I), + z2) + }, + movementY: function(I) { + return "movementY" in I ? I.movementY : O2 + } + }), PU = Pa(gr), qj = J({}, gr, { + dataTransfer: 0 + }), Fj = Pa(qj), xj = J({}, Le, { + relatedTarget: 0 + }), V2 = Pa(xj), yj = J({}, zs, { + animationName: 0, + elapsedTime: 0, + pseudoElement: 0 + }), Lj = Pa(yj), wj = J({}, zs, { + clipboardData: function(I) { + return "clipboardData" in I ? I.clipboardData : window.clipboardData + } + }), zj = Pa(wj), Oj = J({}, zs, { + data: 0 + }), _U = Pa(Oj), Vj = { + Esc: "Escape", + Spacebar: " ", + Left: "ArrowLeft", + Up: "ArrowUp", + Right: "ArrowRight", + Down: "ArrowDown", + Del: "Delete", + Win: "OS", + Menu: "ContextMenu", + Apps: "ContextMenu", + Scroll: "ScrollLock", + MozPrintableKey: "Unidentified" + }, Dj = { + 8: "Backspace", + 9: "Tab", + 12: "Clear", + 13: "Enter", + 16: "Shift", + 17: "Control", + 18: "Alt", + 19: "Pause", + 20: "CapsLock", + 27: "Escape", + 32: " ", + 33: "PageUp", + 34: "PageDown", + 35: "End", + 36: "Home", + 37: "ArrowLeft", + 38: "ArrowUp", + 39: "ArrowRight", + 40: "ArrowDown", + 45: "Insert", + 46: "Delete", + 112: "F1", + 113: "F2", + 114: "F3", + 115: "F4", + 116: "F5", + 117: "F6", + 118: "F7", + 119: "F8", + 120: "F9", + 121: "F10", + 122: "F11", + 123: "F12", + 144: "NumLock", + 145: "ScrollLock", + 224: "Meta" + }, fj = { + Alt: "altKey", + Control: "ctrlKey", + Meta: "metaKey", + Shift: "shiftKey" + }; + function vj(I) { + var e = this.nativeEvent; + return e.getModifierState ? e.getModifierState(I) : (I = fj[I]) ? !!e[I] : !1 + } + function D2() { + return vj + } + var Xj = J({}, Le, { + key: function(I) { + if (I.key) { + var e = Vj[I.key] || I.key; + if (e !== "Unidentified") + return e + } + return I.type === "keypress" ? (I = Ur(I), + I === 13 ? "Enter" : String.fromCharCode(I)) : I.type === "keydown" || I.type === "keyup" ? Dj[I.keyCode] || "Unidentified" : "" + }, + code: 0, + location: 0, + ctrlKey: 0, + shiftKey: 0, + altKey: 0, + metaKey: 0, + repeat: 0, + locale: 0, + getModifierState: D2, + charCode: function(I) { + return I.type === "keypress" ? Ur(I) : 0 + }, + keyCode: function(I) { + return I.type === "keydown" || I.type === "keyup" ? I.keyCode : 0 + }, + which: function(I) { + return I.type === "keypress" ? Ur(I) : I.type === "keydown" || I.type === "keyup" ? I.keyCode : 0 + } + }) + , Hj = Pa(Xj) + , Pj = J({}, gr, { + pointerId: 0, + width: 0, + height: 0, + pressure: 0, + tangentialPressure: 0, + tiltX: 0, + tiltY: 0, + twist: 0, + pointerType: 0, + isPrimary: 0 + }) + , $U = Pa(Pj) + , _j = J({}, Le, { + touches: 0, + targetTouches: 0, + changedTouches: 0, + altKey: 0, + metaKey: 0, + ctrlKey: 0, + shiftKey: 0, + getModifierState: D2 + }) + , $j = Pa(_j) + , tq = J({}, zs, { + propertyName: 0, + elapsedTime: 0, + pseudoElement: 0 + }) + , Aq = Pa(tq) + , aq = J({}, gr, { + deltaX: function(I) { + return "deltaX" in I ? I.deltaX : "wheelDeltaX" in I ? -I.wheelDeltaX : 0 + }, + deltaY: function(I) { + return "deltaY" in I ? I.deltaY : "wheelDeltaY" in I ? -I.wheelDeltaY : "wheelDelta" in I ? -I.wheelDelta : 0 + }, + deltaZ: 0, + deltaMode: 0 + }) + , Sq = Pa(aq) + , iq = J({}, zs, { + newState: 0, + oldState: 0 + }) + , lq = Pa(iq) + , sq = [9, 13, 27, 32] + , f2 = Oi && "CompositionEvent" in window + , ze = null; + Oi && "documentMode" in document && (ze = document.documentMode); + var Iq = Oi && "TextEvent" in window && !ze + , tZ = Oi && (!f2 || ze && 8 < ze && 11 >= ze) + , AZ = " " + , aZ = !1; + function SZ(I, e) { + switch (I) { + case "keyup": + return sq.indexOf(e.keyCode) !== -1; + case "keydown": + return e.keyCode !== 229; + case "keypress": + case "mousedown": + case "focusout": + return !0; + default: + return !1 + } + } + function iZ(I) { + return I = I.detail, + typeof I == "object" && "data" in I ? I.data : null + } + var EE = !1; + function Eq(I, e) { + switch (I) { + case "compositionend": + return iZ(e); + case "keypress": + return e.which !== 32 ? null : (aZ = !0, + AZ); + case "textInput": + return I = e.data, + I === AZ && aZ ? null : I; + default: + return null + } + } + function eq(I, e) { + if (EE) + return I === "compositionend" || !f2 && SZ(I, e) ? (I = XU(), + Rr = w2 = cl = null, + EE = !1, + I) : null; + switch (I) { + case "paste": + return null; + case "keypress": + if (!(e.ctrlKey || e.altKey || e.metaKey) || e.ctrlKey && e.altKey) { + if (e.char && 1 < e.char.length) + return e.char; + if (e.which) + return String.fromCharCode(e.which) + } + return null; + case "compositionend": + return tZ && e.locale !== "ko" ? null : e.data; + default: + return null + } + } + var kq = { + color: !0, + date: !0, + datetime: !0, + "datetime-local": !0, + email: !0, + month: !0, + number: !0, + password: !0, + range: !0, + search: !0, + tel: !0, + text: !0, + time: !0, + url: !0, + week: !0 + }; + function lZ(I) { + var e = I && I.nodeName && I.nodeName.toLowerCase(); + return e === "input" ? !!kq[I.type] : e === "textarea" + } + function sZ(I, e, r, C) { + sE ? IE ? IE.push(C) : IE = [C] : sE = C, + e = Jm(e, "onChange"), + 0 < e.length && (r = new dr("onChange","change",null,r,C), + I.push({ + event: r, + listeners: e + })) + } + var Oe = null + , Ve = null; + function pq(I) { + wg(I, 0) + } + function Wr(I) { + var e = Fe(I); + if (LU(e)) + return I + } + function IZ(I, e) { + if (I === "change") + return e + } + var EZ = !1; + if (Oi) { + var v2; + if (Oi) { + var X2 = "oninput" in document; + if (!X2) { + var eZ = document.createElement("div"); + eZ.setAttribute("oninput", "return;"), + X2 = typeof eZ.oninput == "function" + } + v2 = X2 + } else + v2 = !1; + EZ = v2 && (!document.documentMode || 9 < document.documentMode) + } + function kZ() { + Oe && (Oe.detachEvent("onpropertychange", pZ), + Ve = Oe = null) + } + function pZ(I) { + if (I.propertyName === "value" && Wr(Ve)) { + var e = []; + sZ(e, Ve, I, x2(I)), + vU(pq, e) + } + } + function rq(I, e, r) { + I === "focusin" ? (kZ(), + Oe = e, + Ve = r, + Oe.attachEvent("onpropertychange", pZ)) : I === "focusout" && kZ() + } + function mq(I) { + if (I === "selectionchange" || I === "keyup" || I === "keydown") + return Wr(Ve) + } + function Jq(I, e) { + if (I === "click") + return Wr(e) + } + function Cq(I, e) { + if (I === "input" || I === "change") + return Wr(e) + } + function nq(I, e) { + return I === e && (I !== 0 || 1 / I === 1 / e) || I !== I && e !== e + } + var rS = typeof Object.is == "function" ? Object.is : nq; + function De(I, e) { + if (rS(I, e)) + return !0; + if (typeof I != "object" || I === null || typeof e != "object" || e === null) + return !1; + var r = Object.keys(I) + , C = Object.keys(e); + if (r.length !== C.length) + return !1; + for (C = 0; C < r.length; C++) { + var o = r[C]; + if (!Ta.call(e, o) || !rS(I[o], e[o])) + return !1 + } + return !0 + } + function rZ(I) { + for (; I && I.firstChild; ) + I = I.firstChild; + return I + } + function mZ(I, e) { + var r = rZ(I); + I = 0; + for (var C; r; ) { + if (r.nodeType === 3) { + if (C = I + r.textContent.length, + I <= e && C >= e) + return { + node: r, + offset: e - I + }; + I = C + } + t: { + for (; r; ) { + if (r.nextSibling) { + r = r.nextSibling; + break t + } + r = r.parentNode + } + r = void 0 + } + r = rZ(r) + } + } + function JZ(I, e) { + return I && e ? I === e ? !0 : I && I.nodeType === 3 ? !1 : e && e.nodeType === 3 ? JZ(I, e.parentNode) : "contains" in I ? I.contains(e) : I.compareDocumentPosition ? !!(I.compareDocumentPosition(e) & 16) : !1 : !1 + } + function CZ(I) { + I = I != null && I.ownerDocument != null && I.ownerDocument.defaultView != null ? I.ownerDocument.defaultView : window; + for (var e = hr(I.document); e instanceof I.HTMLIFrameElement; ) { + try { + var r = typeof e.contentWindow.location.href == "string" + } catch { + r = !1 + } + if (r) + I = e.contentWindow; + else + break; + e = hr(I.document) + } + return e + } + function H2(I) { + var e = I && I.nodeName && I.nodeName.toLowerCase(); + return e && (e === "input" && (I.type === "text" || I.type === "search" || I.type === "tel" || I.type === "url" || I.type === "password") || e === "textarea" || I.contentEditable === "true") + } + var bq = Oi && "documentMode" in document && 11 >= document.documentMode + , eE = null + , P2 = null + , fe = null + , _2 = !1; + function nZ(I, e, r) { + var C = r.window === r ? r.document : r.nodeType === 9 ? r : r.ownerDocument; + _2 || eE == null || eE !== hr(C) || (C = eE, + "selectionStart" in C && H2(C) ? C = { + start: C.selectionStart, + end: C.selectionEnd + } : (C = (C.ownerDocument && C.ownerDocument.defaultView || window).getSelection(), + C = { + anchorNode: C.anchorNode, + anchorOffset: C.anchorOffset, + focusNode: C.focusNode, + focusOffset: C.focusOffset + }), + fe && De(fe, C) || (fe = C, + C = Jm(P2, "onSelect"), + 0 < C.length && (e = new dr("onSelect","select",null,e,r), + I.push({ + event: e, + listeners: C + }), + e.target = eE))) + } + function Os(I, e) { + var r = {}; + return r[I.toLowerCase()] = e.toLowerCase(), + r["Webkit" + I] = "webkit" + e, + r["Moz" + I] = "moz" + e, + r + } + var kE = { + animationend: Os("Animation", "AnimationEnd"), + animationiteration: Os("Animation", "AnimationIteration"), + animationstart: Os("Animation", "AnimationStart"), + transitionrun: Os("Transition", "TransitionRun"), + transitionstart: Os("Transition", "TransitionStart"), + transitioncancel: Os("Transition", "TransitionCancel"), + transitionend: Os("Transition", "TransitionEnd") + } + , $2 = {} + , bZ = {}; + Oi && (bZ = document.createElement("div").style, + "AnimationEvent" in window || (delete kE.animationend.animation, + delete kE.animationiteration.animation, + delete kE.animationstart.animation), + "TransitionEvent" in window || delete kE.transitionend.transition); + function Vs(I) { + if ($2[I]) + return $2[I]; + if (!kE[I]) + return I; + var e = kE[I], r; + for (r in e) + if (e.hasOwnProperty(r) && r in bZ) + return $2[I] = e[r]; + return I + } + var oZ = Vs("animationend") + , hZ = Vs("animationiteration") + , QZ = Vs("animationstart") + , oq = Vs("transitionrun") + , hq = Vs("transitionstart") + , Qq = Vs("transitioncancel") + , RZ = Vs("transitionend") + , UZ = new Map + , tn = "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" "); + tn.push("scrollEnd"); + function _S(I, e) { + UZ.set(I, e), + ws(e, [I]) + } + var cr = typeof reportError == "function" ? reportError : function(I) { + if (typeof window == "object" && typeof window.ErrorEvent == "function") { + var e = new window.ErrorEvent("error",{ + bubbles: !0, + cancelable: !0, + message: typeof I == "object" && I !== null && typeof I.message == "string" ? String(I.message) : String(I), + error: I + }); + if (!window.dispatchEvent(e)) + return + } else if (typeof process == "object" && typeof process.emit == "function") { + process.emit("uncaughtException", I); + return + } + console.error(I) + } + , uS = [] + , pE = 0 + , An = 0; + function Kr() { + for (var I = pE, e = An = pE = 0; e < I; ) { + var r = uS[e]; + uS[e++] = null; + var C = uS[e]; + uS[e++] = null; + var o = uS[e]; + uS[e++] = null; + var Q = uS[e]; + if (uS[e++] = null, + C !== null && o !== null) { + var K = C.pending; + K === null ? o.next = o : (o.next = K.next, + K.next = o), + C.pending = o + } + Q !== 0 && ZZ(r, o, Q) + } + } + function Gr(I, e, r, C) { + uS[pE++] = I, + uS[pE++] = e, + uS[pE++] = r, + uS[pE++] = C, + An |= C, + I.lanes |= C, + I = I.alternate, + I !== null && (I.lanes |= C) + } + function an(I, e, r, C) { + return Gr(I, e, r, C), + Yr(I) + } + function Ds(I, e) { + return Gr(I, null, null, e), + Yr(I) + } + function ZZ(I, e, r) { + I.lanes |= r; + var C = I.alternate; + C !== null && (C.lanes |= r); + for (var o = !1, Q = I.return; Q !== null; ) + Q.childLanes |= r, + C = Q.alternate, + C !== null && (C.childLanes |= r), + Q.tag === 22 && (I = Q.stateNode, + I === null || I._visibility & 1 || (o = !0)), + I = Q, + Q = Q.return; + return I.tag === 3 ? (Q = I.stateNode, + o && e !== null && (o = 31 - la(r), + I = Q.hiddenUpdates, + C = I[o], + C === null ? I[o] = [e] : C.push(e), + e.lane = r | 536870912), + Q) : null + } + function Yr(I) { + if (50 < Ck) + throw Ck = 0, + rb = null, + Error(S(185)); + for (var e = I.return; e !== null; ) + I = e, + e = I.return; + return I.tag === 3 ? I.stateNode : null + } + var rE = {}; + function Rq(I, e, r, C) { + this.tag = I, + this.key = r, + this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, + this.index = 0, + this.refCleanup = this.ref = null, + this.pendingProps = e, + this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, + this.mode = C, + this.subtreeFlags = this.flags = 0, + this.deletions = null, + this.childLanes = this.lanes = 0, + this.alternate = null + } + function mS(I, e, r, C) { + return new Rq(I,e,r,C) + } + function Sn(I) { + return I = I.prototype, + !(!I || !I.isReactComponent) + } + function Vi(I, e) { + var r = I.alternate; + return r === null ? (r = mS(I.tag, e, I.key, I.mode), + r.elementType = I.elementType, + r.type = I.type, + r.stateNode = I.stateNode, + r.alternate = I, + I.alternate = r) : (r.pendingProps = e, + r.type = I.type, + r.flags = 0, + r.subtreeFlags = 0, + r.deletions = null), + r.flags = I.flags & 65011712, + r.childLanes = I.childLanes, + r.lanes = I.lanes, + r.child = I.child, + r.memoizedProps = I.memoizedProps, + r.memoizedState = I.memoizedState, + r.updateQueue = I.updateQueue, + e = I.dependencies, + r.dependencies = e === null ? null : { + lanes: e.lanes, + firstContext: e.firstContext + }, + r.sibling = I.sibling, + r.index = I.index, + r.ref = I.ref, + r.refCleanup = I.refCleanup, + r + } + function dZ(I, e) { + I.flags &= 65011714; + var r = I.alternate; + return r === null ? (I.childLanes = 0, + I.lanes = e, + I.child = null, + I.subtreeFlags = 0, + I.memoizedProps = null, + I.memoizedState = null, + I.updateQueue = null, + I.dependencies = null, + I.stateNode = null) : (I.childLanes = r.childLanes, + I.lanes = r.lanes, + I.child = r.child, + I.subtreeFlags = 0, + I.deletions = null, + I.memoizedProps = r.memoizedProps, + I.memoizedState = r.memoizedState, + I.updateQueue = r.updateQueue, + I.type = r.type, + e = r.dependencies, + I.dependencies = e === null ? null : { + lanes: e.lanes, + firstContext: e.firstContext + }), + I + } + function Nr(I, e, r, C, o, Q) { + var K = 0; + if (C = I, + typeof I == "function") + Sn(I) && (K = 1); + else if (typeof I == "string") + K = WF(I, r, P.current) ? 26 : I === "html" || I === "head" || I === "body" ? 27 : 5; + else + t: switch (I) { + case L: + return I = mS(31, r, e, o), + I.elementType = L, + I.lanes = Q, + I; + case R: + return fs(r.children, o, Q, e); + case Z: + K = 8, + o |= 24; + break; + case g: + return I = mS(12, r, e, o | 2), + I.elementType = g, + I.lanes = Q, + I; + case Y: + return I = mS(13, r, e, o), + I.elementType = Y, + I.lanes = Q, + I; + case B: + return I = mS(19, r, e, o), + I.elementType = B, + I.lanes = Q, + I; + default: + if (typeof I == "object" && I !== null) + switch (I.$$typeof) { + case c: + K = 10; + break t; + case W: + K = 9; + break t; + case u: + K = 11; + break t; + case G: + K = 14; + break t; + case M: + K = 16, + C = null; + break t + } + K = 29, + r = Error(S(130, I === null ? "null" : typeof I, "")), + C = null + } + return e = mS(K, r, e, o), + e.elementType = I, + e.type = C, + e.lanes = Q, + e + } + function fs(I, e, r, C) { + return I = mS(7, I, C, e), + I.lanes = r, + I + } + function ln(I, e, r) { + return I = mS(6, I, null, e), + I.lanes = r, + I + } + function gZ(I) { + var e = mS(18, null, null, 0); + return e.stateNode = I, + e + } + function sn(I, e, r) { + return e = mS(4, I.children !== null ? I.children : [], I.key, e), + e.lanes = r, + e.stateNode = { + containerInfo: I.containerInfo, + pendingChildren: null, + implementation: I.implementation + }, + e + } + var WZ = new WeakMap; + function MS(I, e) { + if (typeof I == "object" && I !== null) { + var r = WZ.get(I); + return r !== void 0 ? r : (e = { + value: I, + source: e, + stack: qs(e) + }, + WZ.set(I, e), + e) + } + return { + value: I, + source: e, + stack: qs(e) + } + } + var mE = [] + , JE = 0 + , ur = null + , ve = 0 + , BS = [] + , TS = 0 + , Kl = null + , mi = 1 + , Ji = ""; + function Di(I, e) { + mE[JE++] = ve, + mE[JE++] = ur, + ur = I, + ve = e + } + function cZ(I, e, r) { + BS[TS++] = mi, + BS[TS++] = Ji, + BS[TS++] = Kl, + Kl = I; + var C = mi; + I = Ji; + var o = 32 - la(C) - 1; + C &= ~(1 << o), + r += 1; + var Q = 32 - la(e) + o; + if (30 < Q) { + var K = o - o % 5; + Q = (C & (1 << K) - 1).toString(32), + C >>= K, + o -= K, + mi = 1 << 32 - la(e) + o | r << o | C, + Ji = Q + I + } else + mi = 1 << Q | r << o | C, + Ji = I + } + function In(I) { + I.return !== null && (Di(I, 1), + cZ(I, 1, 0)) + } + function En(I) { + for (; I === ur; ) + ur = mE[--JE], + mE[JE] = null, + ve = mE[--JE], + mE[JE] = null; + for (; I === Kl; ) + Kl = BS[--TS], + BS[TS] = null, + Ji = BS[--TS], + BS[TS] = null, + mi = BS[--TS], + BS[TS] = null + } + function KZ(I, e) { + BS[TS++] = mi, + BS[TS++] = Ji, + BS[TS++] = Kl, + mi = e.id, + Ji = e.overflow, + Kl = I + } + var ha = null + , ZA = null + , $t = !1 + , Gl = null + , jS = !1 + , en = Error(S(519)); + function Yl(I) { + var e = Error(S(418, 1 < arguments.length && arguments[1] !== void 0 && arguments[1] ? "text" : "HTML", "")); + throw Xe(MS(e, I)), + en + } + function GZ(I) { + var e = I.stateNode + , r = I.type + , C = I.memoizedProps; + switch (e[oa] = I, + e[Ha] = C, + r) { + case "dialog": + Xt("cancel", e), + Xt("close", e); + break; + case "iframe": + case "object": + case "embed": + Xt("load", e); + break; + case "video": + case "audio": + for (r = 0; r < bk.length; r++) + Xt(bk[r], e); + break; + case "source": + Xt("error", e); + break; + case "img": + case "image": + case "link": + Xt("error", e), + Xt("load", e); + break; + case "details": + Xt("toggle", e); + break; + case "input": + Xt("invalid", e), + wU(e, C.value, C.defaultValue, C.checked, C.defaultChecked, C.type, C.name, !0); + break; + case "select": + Xt("invalid", e); + break; + case "textarea": + Xt("invalid", e), + OU(e, C.value, C.defaultValue, C.children) + } + r = C.children, + typeof r != "string" && typeof r != "number" && typeof r != "bigint" || e.textContent === "" + r || C.suppressHydrationWarning === !0 || Dg(e.textContent, r) ? (C.popover != null && (Xt("beforetoggle", e), + Xt("toggle", e)), + C.onScroll != null && Xt("scroll", e), + C.onScrollEnd != null && Xt("scrollend", e), + C.onClick != null && (e.onclick = zi), + e = !0) : e = !1, + e || Yl(I, !0) + } + function YZ(I) { + for (ha = I.return; ha; ) + switch (ha.tag) { + case 5: + case 31: + case 13: + jS = !1; + return; + case 27: + case 3: + jS = !0; + return; + default: + ha = ha.return + } + } + function CE(I) { + if (I !== ha) + return !1; + if (!$t) + return YZ(I), + $t = !0, + !1; + var e = I.tag, r; + if ((r = e !== 3 && e !== 27) && ((r = e === 5) && (r = I.type, + r = !(r !== "form" && r !== "button") || cb(I.type, I.memoizedProps)), + r = !r), + r && ZA && Yl(I), + YZ(I), + e === 13) { + if (I = I.memoizedState, + I = I !== null ? I.dehydrated : null, + !I) + throw Error(S(317)); + ZA = AW(I) + } else if (e === 31) { + if (I = I.memoizedState, + I = I !== null ? I.dehydrated : null, + !I) + throw Error(S(317)); + ZA = AW(I) + } else + e === 27 ? (e = ZA, + Ol(I.type) ? (I = ub, + ub = null, + ZA = I) : ZA = e) : ZA = ha ? FS(I.stateNode.nextSibling) : null; + return !0 + } + function vs() { + ZA = ha = null, + $t = !1 + } + function kn() { + var I = Gl; + return I !== null && (AS === null ? AS = I : AS.push.apply(AS, I), + Gl = null), + I + } + function Xe(I) { + Gl === null ? Gl = [I] : Gl.push(I) + } + var pn = j(null) + , Xs = null + , fi = null; + function Nl(I, e, r) { + V(pn, e._currentValue), + e._currentValue = r + } + function vi(I) { + I._currentValue = pn.current, + H(pn) + } + function rn(I, e, r) { + for (; I !== null; ) { + var C = I.alternate; + if ((I.childLanes & e) !== e ? (I.childLanes |= e, + C !== null && (C.childLanes |= e)) : C !== null && (C.childLanes & e) !== e && (C.childLanes |= e), + I === r) + break; + I = I.return + } + } + function mn(I, e, r, C) { + var o = I.child; + for (o !== null && (o.return = I); o !== null; ) { + var Q = o.dependencies; + if (Q !== null) { + var K = o.child; + Q = Q.firstContext; + t: for (; Q !== null; ) { + var N = Q; + Q = o; + for (var F = 0; F < e.length; F++) + if (N.context === e[F]) { + Q.lanes |= r, + N = Q.alternate, + N !== null && (N.lanes |= r), + rn(Q.return, r, I), + C || (K = null); + break t + } + Q = N.next + } + } else if (o.tag === 18) { + if (K = o.return, + K === null) + throw Error(S(341)); + K.lanes |= r, + Q = K.alternate, + Q !== null && (Q.lanes |= r), + rn(K, r, I), + K = null + } else + K = o.child; + if (K !== null) + K.return = o; + else + for (K = o; K !== null; ) { + if (K === I) { + K = null; + break + } + if (o = K.sibling, + o !== null) { + o.return = K.return, + K = o; + break + } + K = K.return + } + o = K + } + } + function nE(I, e, r, C) { + I = null; + for (var o = e, Q = !1; o !== null; ) { + if (!Q) { + if ((o.flags & 524288) !== 0) + Q = !0; + else if ((o.flags & 262144) !== 0) + break + } + if (o.tag === 10) { + var K = o.alternate; + if (K === null) + throw Error(S(387)); + if (K = K.memoizedProps, + K !== null) { + var N = o.type; + rS(o.pendingProps.value, K.value) || (I !== null ? I.push(N) : I = [N]) + } + } else if (o === lt.current) { + if (K = o.alternate, + K === null) + throw Error(S(387)); + K.memoizedState.memoizedState !== o.memoizedState.memoizedState && (I !== null ? I.push(Uk) : I = [Uk]) + } + o = o.return + } + I !== null && mn(e, I, r, C), + e.flags |= 262144 + } + function Mr(I) { + for (I = I.firstContext; I !== null; ) { + if (!rS(I.context._currentValue, I.memoizedValue)) + return !0; + I = I.next + } + return !1 + } + function Hs(I) { + Xs = I, + fi = null, + I = I.dependencies, + I !== null && (I.firstContext = null) + } + function Qa(I) { + return NZ(Xs, I) + } + function Br(I, e) { + return Xs === null && Hs(I), + NZ(I, e) + } + function NZ(I, e) { + var r = e._currentValue; + if (e = { + context: e, + memoizedValue: r, + next: null + }, + fi === null) { + if (I === null) + throw Error(S(308)); + fi = e, + I.dependencies = { + lanes: 0, + firstContext: e + }, + I.flags |= 524288 + } else + fi = fi.next = e; + return r + } + var Uq = typeof AbortController < "u" ? AbortController : function() { + var I = [] + , e = this.signal = { + aborted: !1, + addEventListener: function(r, C) { + I.push(C) + } + }; + this.abort = function() { + e.aborted = !0, + I.forEach(function(r) { + return r() + }) + } + } + , Zq = A.unstable_scheduleCallback + , dq = A.unstable_NormalPriority + , HA = { + $$typeof: c, + Consumer: null, + Provider: null, + _currentValue: null, + _currentValue2: null, + _threadCount: 0 + }; + function Jn() { + return { + controller: new Uq, + data: new Map, + refCount: 0 + } + } + function He(I) { + I.refCount--, + I.refCount === 0 && Zq(dq, function() { + I.controller.abort() + }) + } + var Pe = null + , Cn = 0 + , bE = 0 + , oE = null; + function gq(I, e) { + if (Pe === null) { + var r = Pe = []; + Cn = 0, + bE = ob(), + oE = { + status: "pending", + value: void 0, + then: function(C) { + r.push(C) + } + } + } + return Cn++, + e.then(uZ, uZ), + e + } + function uZ() { + if (--Cn === 0 && Pe !== null) { + oE !== null && (oE.status = "fulfilled"); + var I = Pe; + Pe = null, + bE = 0, + oE = null; + for (var e = 0; e < I.length; e++) + (0, + I[e])() + } + } + function Wq(I, e) { + var r = [] + , C = { + status: "pending", + value: null, + reason: null, + then: function(o) { + r.push(o) + } + }; + return I.then(function() { + C.status = "fulfilled", + C.value = e; + for (var o = 0; o < r.length; o++) + (0, + r[o])(e) + }, function(o) { + for (C.status = "rejected", + C.reason = o, + o = 0; o < r.length; o++) + (0, + r[o])(void 0) + }), + C + } + var MZ = T.S; + T.S = function(I, e) { + ng = ia(), + typeof e == "object" && e !== null && typeof e.then == "function" && gq(I, e), + MZ !== null && MZ(I, e) + } + ; + var Ps = j(null); + function nn() { + var I = Ps.current; + return I !== null ? I : hA.pooledCache + } + function Tr(I, e) { + e === null ? V(Ps, Ps.current) : V(Ps, e.pool) + } + function BZ() { + var I = nn(); + return I === null ? null : { + parent: HA._currentValue, + pool: I + } + } + var hE = Error(S(460)) + , bn = Error(S(474)) + , jr = Error(S(542)) + , qr = { + then: function() {} + }; + function TZ(I) { + return I = I.status, + I === "fulfilled" || I === "rejected" + } + function jZ(I, e, r) { + switch (r = I[r], + r === void 0 ? I.push(e) : r !== e && (e.then(zi, zi), + e = r), + e.status) { + case "fulfilled": + return e.value; + case "rejected": + throw I = e.reason, + FZ(I), + I; + default: + if (typeof e.status == "string") + e.then(zi, zi); + else { + if (I = hA, + I !== null && 100 < I.shellSuspendCounter) + throw Error(S(482)); + I = e, + I.status = "pending", + I.then(function(C) { + if (e.status === "pending") { + var o = e; + o.status = "fulfilled", + o.value = C + } + }, function(C) { + if (e.status === "pending") { + var o = e; + o.status = "rejected", + o.reason = C + } + }) + } + switch (e.status) { + case "fulfilled": + return e.value; + case "rejected": + throw I = e.reason, + FZ(I), + I + } + throw $s = e, + hE + } + } + function _s(I) { + try { + var e = I._init; + return e(I._payload) + } catch (r) { + throw r !== null && typeof r == "object" && typeof r.then == "function" ? ($s = r, + hE) : r + } + } + var $s = null; + function qZ() { + if ($s === null) + throw Error(S(459)); + var I = $s; + return $s = null, + I + } + function FZ(I) { + if (I === hE || I === jr) + throw Error(S(483)) + } + var QE = null + , _e = 0; + function Fr(I) { + var e = _e; + return _e += 1, + QE === null && (QE = []), + jZ(QE, I, e) + } + function $e(I, e) { + e = e.props.ref, + I.ref = e !== void 0 ? e : null + } + function xr(I, e) { + throw e.$$typeof === b ? Error(S(525)) : (I = Object.prototype.toString.call(e), + Error(S(31, I === "[object Object]" ? "object with keys {" + Object.keys(e).join(", ") + "}" : I))) + } + function xZ(I) { + function e(w, x) { + if (I) { + var D = w.deletions; + D === null ? (w.deletions = [x], + w.flags |= 16) : D.push(x) + } + } + function r(w, x) { + if (!I) + return null; + for (; x !== null; ) + e(w, x), + x = x.sibling; + return null + } + function C(w) { + for (var x = new Map; w !== null; ) + w.key !== null ? x.set(w.key, w) : x.set(w.index, w), + w = w.sibling; + return x + } + function o(w, x) { + return w = Vi(w, x), + w.index = 0, + w.sibling = null, + w + } + function Q(w, x, D) { + return w.index = D, + I ? (D = w.alternate, + D !== null ? (D = D.index, + D < x ? (w.flags |= 67108866, + x) : D) : (w.flags |= 67108866, + x)) : (w.flags |= 1048576, + x) + } + function K(w) { + return I && w.alternate === null && (w.flags |= 67108866), + w + } + function N(w, x, D, st) { + return x === null || x.tag !== 6 ? (x = ln(D, w.mode, st), + x.return = w, + x) : (x = o(x, D), + x.return = w, + x) + } + function F(w, x, D, st) { + var Kt = D.type; + return Kt === R ? it(w, x, D.props.children, st, D.key) : x !== null && (x.elementType === Kt || typeof Kt == "object" && Kt !== null && Kt.$$typeof === M && _s(Kt) === x.type) ? (x = o(x, D.props), + $e(x, D), + x.return = w, + x) : (x = Nr(D.type, D.key, D.props, null, w.mode, st), + $e(x, D), + x.return = w, + x) + } + function f(w, x, D, st) { + return x === null || x.tag !== 4 || x.stateNode.containerInfo !== D.containerInfo || x.stateNode.implementation !== D.implementation ? (x = sn(D, w.mode, st), + x.return = w, + x) : (x = o(x, D.children || []), + x.return = w, + x) + } + function it(w, x, D, st, Kt) { + return x === null || x.tag !== 7 ? (x = fs(D, w.mode, st, Kt), + x.return = w, + x) : (x = o(x, D), + x.return = w, + x) + } + function Et(w, x, D) { + if (typeof x == "string" && x !== "" || typeof x == "number" || typeof x == "bigint") + return x = ln("" + x, w.mode, D), + x.return = w, + x; + if (typeof x == "object" && x !== null) { + switch (x.$$typeof) { + case h: + return D = Nr(x.type, x.key, x.props, null, w.mode, D), + $e(D, x), + D.return = w, + D; + case U: + return x = sn(x, w.mode, D), + x.return = w, + x; + case M: + return x = _s(x), + Et(w, x, D) + } + if (It(x) || tt(x)) + return x = fs(x, w.mode, D, null), + x.return = w, + x; + if (typeof x.then == "function") + return Et(w, Fr(x), D); + if (x.$$typeof === c) + return Et(w, Br(w, x), D); + xr(w, x) + } + return null + } + function X(w, x, D, st) { + var Kt = x !== null ? x.key : null; + if (typeof D == "string" && D !== "" || typeof D == "number" || typeof D == "bigint") + return Kt !== null ? null : N(w, x, "" + D, st); + if (typeof D == "object" && D !== null) { + switch (D.$$typeof) { + case h: + return D.key === Kt ? F(w, x, D, st) : null; + case U: + return D.key === Kt ? f(w, x, D, st) : null; + case M: + return D = _s(D), + X(w, x, D, st) + } + if (It(D) || tt(D)) + return Kt !== null ? null : it(w, x, D, st, null); + if (typeof D.then == "function") + return X(w, x, Fr(D), st); + if (D.$$typeof === c) + return X(w, x, Br(w, D), st); + xr(w, D) + } + return null + } + function At(w, x, D, st, Kt) { + if (typeof st == "string" && st !== "" || typeof st == "number" || typeof st == "bigint") + return w = w.get(D) || null, + N(x, w, "" + st, Kt); + if (typeof st == "object" && st !== null) { + switch (st.$$typeof) { + case h: + return w = w.get(st.key === null ? D : st.key) || null, + F(x, w, st, Kt); + case U: + return w = w.get(st.key === null ? D : st.key) || null, + f(x, w, st, Kt); + case M: + return st = _s(st), + At(w, x, D, st, Kt) + } + if (It(st) || tt(st)) + return w = w.get(D) || null, + it(x, w, st, Kt, null); + if (typeof st.then == "function") + return At(w, x, D, Fr(st), Kt); + if (st.$$typeof === c) + return At(w, x, D, Br(x, st), Kt); + xr(x, st) + } + return null + } + function ht(w, x, D, st) { + for (var Kt = null, SA = null, gt = x, wt = x = 0, Pt = null; gt !== null && wt < D.length; wt++) { + gt.index > wt ? (Pt = gt, + gt = null) : Pt = gt.sibling; + var iA = X(w, gt, D[wt], st); + if (iA === null) { + gt === null && (gt = Pt); + break + } + I && gt && iA.alternate === null && e(w, gt), + x = Q(iA, x, wt), + SA === null ? Kt = iA : SA.sibling = iA, + SA = iA, + gt = Pt + } + if (wt === D.length) + return r(w, gt), + $t && Di(w, wt), + Kt; + if (gt === null) { + for (; wt < D.length; wt++) + gt = Et(w, D[wt], st), + gt !== null && (x = Q(gt, x, wt), + SA === null ? Kt = gt : SA.sibling = gt, + SA = gt); + return $t && Di(w, wt), + Kt + } + for (gt = C(gt); wt < D.length; wt++) + Pt = At(gt, w, wt, D[wt], st), + Pt !== null && (I && Pt.alternate !== null && gt.delete(Pt.key === null ? wt : Pt.key), + x = Q(Pt, x, wt), + SA === null ? Kt = Pt : SA.sibling = Pt, + SA = Pt); + return I && gt.forEach(function(Xl) { + return e(w, Xl) + }), + $t && Di(w, wt), + Kt + } + function Yt(w, x, D, st) { + if (D == null) + throw Error(S(151)); + for (var Kt = null, SA = null, gt = x, wt = x = 0, Pt = null, iA = D.next(); gt !== null && !iA.done; wt++, + iA = D.next()) { + gt.index > wt ? (Pt = gt, + gt = null) : Pt = gt.sibling; + var Xl = X(w, gt, iA.value, st); + if (Xl === null) { + gt === null && (gt = Pt); + break + } + I && gt && Xl.alternate === null && e(w, gt), + x = Q(Xl, x, wt), + SA === null ? Kt = Xl : SA.sibling = Xl, + SA = Xl, + gt = Pt + } + if (iA.done) + return r(w, gt), + $t && Di(w, wt), + Kt; + if (gt === null) { + for (; !iA.done; wt++, + iA = D.next()) + iA = Et(w, iA.value, st), + iA !== null && (x = Q(iA, x, wt), + SA === null ? Kt = iA : SA.sibling = iA, + SA = iA); + return $t && Di(w, wt), + Kt + } + for (gt = C(gt); !iA.done; wt++, + iA = D.next()) + iA = At(gt, w, wt, iA.value, st), + iA !== null && (I && iA.alternate !== null && gt.delete(iA.key === null ? wt : iA.key), + x = Q(iA, x, wt), + SA === null ? Kt = iA : SA.sibling = iA, + SA = iA); + return I && gt.forEach(function(qF) { + return e(w, qF) + }), + $t && Di(w, wt), + Kt + } + function bA(w, x, D, st) { + if (typeof D == "object" && D !== null && D.type === R && D.key === null && (D = D.props.children), + typeof D == "object" && D !== null) { + switch (D.$$typeof) { + case h: + t: { + for (var Kt = D.key; x !== null; ) { + if (x.key === Kt) { + if (Kt = D.type, + Kt === R) { + if (x.tag === 7) { + r(w, x.sibling), + st = o(x, D.props.children), + st.return = w, + w = st; + break t + } + } else if (x.elementType === Kt || typeof Kt == "object" && Kt !== null && Kt.$$typeof === M && _s(Kt) === x.type) { + r(w, x.sibling), + st = o(x, D.props), + $e(st, D), + st.return = w, + w = st; + break t + } + r(w, x); + break + } else + e(w, x); + x = x.sibling + } + D.type === R ? (st = fs(D.props.children, w.mode, st, D.key), + st.return = w, + w = st) : (st = Nr(D.type, D.key, D.props, null, w.mode, st), + $e(st, D), + st.return = w, + w = st) + } + return K(w); + case U: + t: { + for (Kt = D.key; x !== null; ) { + if (x.key === Kt) + if (x.tag === 4 && x.stateNode.containerInfo === D.containerInfo && x.stateNode.implementation === D.implementation) { + r(w, x.sibling), + st = o(x, D.children || []), + st.return = w, + w = st; + break t + } else { + r(w, x); + break + } + else + e(w, x); + x = x.sibling + } + st = sn(D, w.mode, st), + st.return = w, + w = st + } + return K(w); + case M: + return D = _s(D), + bA(w, x, D, st) + } + if (It(D)) + return ht(w, x, D, st); + if (tt(D)) { + if (Kt = tt(D), + typeof Kt != "function") + throw Error(S(150)); + return D = Kt.call(D), + Yt(w, x, D, st) + } + if (typeof D.then == "function") + return bA(w, x, Fr(D), st); + if (D.$$typeof === c) + return bA(w, x, Br(w, D), st); + xr(w, D) + } + return typeof D == "string" && D !== "" || typeof D == "number" || typeof D == "bigint" ? (D = "" + D, + x !== null && x.tag === 6 ? (r(w, x.sibling), + st = o(x, D), + st.return = w, + w = st) : (r(w, x), + st = ln(D, w.mode, st), + st.return = w, + w = st), + K(w)) : r(w, x) + } + return function(w, x, D, st) { + try { + _e = 0; + var Kt = bA(w, x, D, st); + return QE = null, + Kt + } catch (gt) { + if (gt === hE || gt === jr) + throw gt; + var SA = mS(29, gt, null, w.mode); + return SA.lanes = st, + SA.return = w, + SA + } finally {} + } + } + var tI = xZ(!0) + , yZ = xZ(!1) + , ul = !1; + function on(I) { + I.updateQueue = { + baseState: I.memoizedState, + firstBaseUpdate: null, + lastBaseUpdate: null, + shared: { + pending: null, + lanes: 0, + hiddenCallbacks: null + }, + callbacks: null + } + } + function hn(I, e) { + I = I.updateQueue, + e.updateQueue === I && (e.updateQueue = { + baseState: I.baseState, + firstBaseUpdate: I.firstBaseUpdate, + lastBaseUpdate: I.lastBaseUpdate, + shared: I.shared, + callbacks: null + }) + } + function Ml(I) { + return { + lane: I, + tag: 0, + payload: null, + callback: null, + next: null + } + } + function Bl(I, e, r) { + var C = I.updateQueue; + if (C === null) + return null; + if (C = C.shared, + (sA & 2) !== 0) { + var o = C.pending; + return o === null ? e.next = e : (e.next = o.next, + o.next = e), + C.pending = e, + e = Yr(I), + ZZ(I, null, r), + e + } + return Gr(I, C, e, r), + Yr(I) + } + function tk(I, e, r) { + if (e = e.updateQueue, + e !== null && (e = e.shared, + (r & 4194048) !== 0)) { + var C = e.lanes; + C &= I.pendingLanes, + r |= C, + e.lanes = r, + va(I, r) + } + } + function Qn(I, e) { + var r = I.updateQueue + , C = I.alternate; + if (C !== null && (C = C.updateQueue, + r === C)) { + var o = null + , Q = null; + if (r = r.firstBaseUpdate, + r !== null) { + do { + var K = { + lane: r.lane, + tag: r.tag, + payload: r.payload, + callback: null, + next: null + }; + Q === null ? o = Q = K : Q = Q.next = K, + r = r.next + } while (r !== null); + Q === null ? o = Q = e : Q = Q.next = e + } else + o = Q = e; + r = { + baseState: C.baseState, + firstBaseUpdate: o, + lastBaseUpdate: Q, + shared: C.shared, + callbacks: C.callbacks + }, + I.updateQueue = r; + return + } + I = r.lastBaseUpdate, + I === null ? r.firstBaseUpdate = e : I.next = e, + r.lastBaseUpdate = e + } + var Rn = !1; + function Ak() { + if (Rn) { + var I = oE; + if (I !== null) + throw I + } + } + function ak(I, e, r, C) { + Rn = !1; + var o = I.updateQueue; + ul = !1; + var Q = o.firstBaseUpdate + , K = o.lastBaseUpdate + , N = o.shared.pending; + if (N !== null) { + o.shared.pending = null; + var F = N + , f = F.next; + F.next = null, + K === null ? Q = f : K.next = f, + K = F; + var it = I.alternate; + it !== null && (it = it.updateQueue, + N = it.lastBaseUpdate, + N !== K && (N === null ? it.firstBaseUpdate = f : N.next = f, + it.lastBaseUpdate = F)) + } + if (Q !== null) { + var Et = o.baseState; + K = 0, + it = f = F = null, + N = Q; + do { + var X = N.lane & -536870913 + , At = X !== N.lane; + if (At ? (Ht & X) === X : (C & X) === X) { + X !== 0 && X === bE && (Rn = !0), + it !== null && (it = it.next = { + lane: 0, + tag: N.tag, + payload: N.payload, + callback: null, + next: null + }); + t: { + var ht = I + , Yt = N; + X = e; + var bA = r; + switch (Yt.tag) { + case 1: + if (ht = Yt.payload, + typeof ht == "function") { + Et = ht.call(bA, Et, X); + break t + } + Et = ht; + break t; + case 3: + ht.flags = ht.flags & -65537 | 128; + case 0: + if (ht = Yt.payload, + X = typeof ht == "function" ? ht.call(bA, Et, X) : ht, + X == null) + break t; + Et = J({}, Et, X); + break t; + case 2: + ul = !0 + } + } + X = N.callback, + X !== null && (I.flags |= 64, + At && (I.flags |= 8192), + At = o.callbacks, + At === null ? o.callbacks = [X] : At.push(X)) + } else + At = { + lane: X, + tag: N.tag, + payload: N.payload, + callback: N.callback, + next: null + }, + it === null ? (f = it = At, + F = Et) : it = it.next = At, + K |= X; + if (N = N.next, + N === null) { + if (N = o.shared.pending, + N === null) + break; + At = N, + N = At.next, + At.next = null, + o.lastBaseUpdate = At, + o.shared.pending = null + } + } while (!0); + it === null && (F = Et), + o.baseState = F, + o.firstBaseUpdate = f, + o.lastBaseUpdate = it, + Q === null && (o.shared.lanes = 0), + xl |= K, + I.lanes = K, + I.memoizedState = Et + } + } + function LZ(I, e) { + if (typeof I != "function") + throw Error(S(191, I)); + I.call(e) + } + function wZ(I, e) { + var r = I.callbacks; + if (r !== null) + for (I.callbacks = null, + I = 0; I < r.length; I++) + LZ(r[I], e) + } + var RE = j(null) + , yr = j(0); + function zZ(I, e) { + I = Sl, + V(yr, I), + V(RE, e), + Sl = I | e.baseLanes + } + function Un() { + V(yr, Sl), + V(RE, RE.current) + } + function Zn() { + Sl = yr.current, + H(RE), + H(yr) + } + var JS = j(null) + , qS = null; + function Tl(I) { + var e = I.alternate; + V(wA, wA.current & 1), + V(JS, I), + qS === null && (e === null || RE.current !== null || e.memoizedState !== null) && (qS = I) + } + function dn(I) { + V(wA, wA.current), + V(JS, I), + qS === null && (qS = I) + } + function OZ(I) { + I.tag === 22 ? (V(wA, wA.current), + V(JS, I), + qS === null && (qS = I)) : jl() + } + function jl() { + V(wA, wA.current), + V(JS, JS.current) + } + function CS(I) { + H(JS), + qS === I && (qS = null), + H(wA) + } + var wA = j(0); + function Lr(I) { + for (var e = I; e !== null; ) { + if (e.tag === 13) { + var r = e.memoizedState; + if (r !== null && (r = r.dehydrated, + r === null || Yb(r) || Nb(r))) + return e + } else if (e.tag === 19 && (e.memoizedProps.revealOrder === "forwards" || e.memoizedProps.revealOrder === "backwards" || e.memoizedProps.revealOrder === "unstable_legacy-backwards" || e.memoizedProps.revealOrder === "together")) { + if ((e.flags & 128) !== 0) + return e + } else if (e.child !== null) { + e.child.return = e, + e = e.child; + continue + } + if (e === I) + break; + for (; e.sibling === null; ) { + if (e.return === null || e.return === I) + return null; + e = e.return + } + e.sibling.return = e.return, + e = e.sibling + } + return null + } + var Xi = 0 + , yt = null + , CA = null + , PA = null + , wr = !1 + , UE = !1 + , AI = !1 + , zr = 0 + , Sk = 0 + , ZE = null + , cq = 0; + function BA() { + throw Error(S(321)) + } + function gn(I, e) { + if (e === null) + return !1; + for (var r = 0; r < e.length && r < I.length; r++) + if (!rS(I[r], e[r])) + return !1; + return !0 + } + function Wn(I, e, r, C, o, Q) { + return Xi = Q, + yt = e, + e.memoizedState = null, + e.updateQueue = null, + e.lanes = 0, + T.H = I === null || I.memoizedState === null ? cd : Ln, + AI = !1, + Q = r(C, o), + AI = !1, + UE && (Q = DZ(e, r, C, o)), + VZ(I), + Q + } + function VZ(I) { + T.H = sk; + var e = CA !== null && CA.next !== null; + if (Xi = 0, + PA = CA = yt = null, + wr = !1, + Sk = 0, + ZE = null, + e) + throw Error(S(300)); + I === null || _A || (I = I.dependencies, + I !== null && Mr(I) && (_A = !0)) + } + function DZ(I, e, r, C) { + yt = I; + var o = 0; + do { + if (UE && (ZE = null), + Sk = 0, + UE = !1, + 25 <= o) + throw Error(S(301)); + if (o += 1, + PA = CA = null, + I.updateQueue != null) { + var Q = I.updateQueue; + Q.lastEffect = null, + Q.events = null, + Q.stores = null, + Q.memoCache != null && (Q.memoCache.index = 0) + } + T.H = Kd, + Q = e(r, C) + } while (UE); + return Q + } + function Kq() { + var I = T.H + , e = I.useState()[0]; + return e = typeof e.then == "function" ? ik(e) : e, + I = I.useState()[0], + (CA !== null ? CA.memoizedState : null) !== I && (yt.flags |= 1024), + e + } + function cn() { + var I = zr !== 0; + return zr = 0, + I + } + function Kn(I, e, r) { + e.updateQueue = I.updateQueue, + e.flags &= -2053, + I.lanes &= ~r + } + function Gn(I) { + if (wr) { + for (I = I.memoizedState; I !== null; ) { + var e = I.queue; + e !== null && (e.pending = null), + I = I.next + } + wr = !1 + } + Xi = 0, + PA = CA = yt = null, + UE = !1, + Sk = zr = 0, + ZE = null + } + function ja() { + var I = { + memoizedState: null, + baseState: null, + baseQueue: null, + queue: null, + next: null + }; + return PA === null ? yt.memoizedState = PA = I : PA = PA.next = I, + PA + } + function zA() { + if (CA === null) { + var I = yt.alternate; + I = I !== null ? I.memoizedState : null + } else + I = CA.next; + var e = PA === null ? yt.memoizedState : PA.next; + if (e !== null) + PA = e, + CA = I; + else { + if (I === null) + throw yt.alternate === null ? Error(S(467)) : Error(S(310)); + CA = I, + I = { + memoizedState: CA.memoizedState, + baseState: CA.baseState, + baseQueue: CA.baseQueue, + queue: CA.queue, + next: null + }, + PA === null ? yt.memoizedState = PA = I : PA = PA.next = I + } + return PA + } + function Or() { + return { + lastEffect: null, + events: null, + stores: null, + memoCache: null + } + } + function ik(I) { + var e = Sk; + return Sk += 1, + ZE === null && (ZE = []), + I = jZ(ZE, I, e), + e = yt, + (PA === null ? e.memoizedState : PA.next) === null && (e = e.alternate, + T.H = e === null || e.memoizedState === null ? cd : Ln), + I + } + function Vr(I) { + if (I !== null && typeof I == "object") { + if (typeof I.then == "function") + return ik(I); + if (I.$$typeof === c) + return Qa(I) + } + throw Error(S(438, String(I))) + } + function Yn(I) { + var e = null + , r = yt.updateQueue; + if (r !== null && (e = r.memoCache), + e == null) { + var C = yt.alternate; + C !== null && (C = C.updateQueue, + C !== null && (C = C.memoCache, + C != null && (e = { + data: C.data.map(function(o) { + return o.slice() + }), + index: 0 + }))) + } + if (e == null && (e = { + data: [], + index: 0 + }), + r === null && (r = Or(), + yt.updateQueue = r), + r.memoCache = e, + r = e.data[e.index], + r === void 0) + for (r = e.data[e.index] = Array(I), + C = 0; C < I; C++) + r[C] = v; + return e.index++, + r + } + function Hi(I, e) { + return typeof e == "function" ? e(I) : e + } + function Dr(I) { + var e = zA(); + return Nn(e, CA, I) + } + function Nn(I, e, r) { + var C = I.queue; + if (C === null) + throw Error(S(311)); + C.lastRenderedReducer = r; + var o = I.baseQueue + , Q = C.pending; + if (Q !== null) { + if (o !== null) { + var K = o.next; + o.next = Q.next, + Q.next = K + } + e.baseQueue = o = Q, + C.pending = null + } + if (Q = I.baseState, + o === null) + I.memoizedState = Q; + else { + e = o.next; + var N = K = null + , F = null + , f = e + , it = !1; + do { + var Et = f.lane & -536870913; + if (Et !== f.lane ? (Ht & Et) === Et : (Xi & Et) === Et) { + var X = f.revertLane; + if (X === 0) + F !== null && (F = F.next = { + lane: 0, + revertLane: 0, + gesture: null, + action: f.action, + hasEagerState: f.hasEagerState, + eagerState: f.eagerState, + next: null + }), + Et === bE && (it = !0); + else if ((Xi & X) === X) { + f = f.next, + X === bE && (it = !0); + continue + } else + Et = { + lane: 0, + revertLane: f.revertLane, + gesture: null, + action: f.action, + hasEagerState: f.hasEagerState, + eagerState: f.eagerState, + next: null + }, + F === null ? (N = F = Et, + K = Q) : F = F.next = Et, + yt.lanes |= X, + xl |= X; + Et = f.action, + AI && r(Q, Et), + Q = f.hasEagerState ? f.eagerState : r(Q, Et) + } else + X = { + lane: Et, + revertLane: f.revertLane, + gesture: f.gesture, + action: f.action, + hasEagerState: f.hasEagerState, + eagerState: f.eagerState, + next: null + }, + F === null ? (N = F = X, + K = Q) : F = F.next = X, + yt.lanes |= Et, + xl |= Et; + f = f.next + } while (f !== null && f !== e); + if (F === null ? K = Q : F.next = N, + !rS(Q, I.memoizedState) && (_A = !0, + it && (r = oE, + r !== null))) + throw r; + I.memoizedState = Q, + I.baseState = K, + I.baseQueue = F, + C.lastRenderedState = Q + } + return o === null && (C.lanes = 0), + [I.memoizedState, C.dispatch] + } + function un(I) { + var e = zA() + , r = e.queue; + if (r === null) + throw Error(S(311)); + r.lastRenderedReducer = I; + var C = r.dispatch + , o = r.pending + , Q = e.memoizedState; + if (o !== null) { + r.pending = null; + var K = o = o.next; + do + Q = I(Q, K.action), + K = K.next; + while (K !== o); + rS(Q, e.memoizedState) || (_A = !0), + e.memoizedState = Q, + e.baseQueue === null && (e.baseState = Q), + r.lastRenderedState = Q + } + return [Q, C] + } + function fZ(I, e, r) { + var C = yt + , o = zA() + , Q = $t; + if (Q) { + if (r === void 0) + throw Error(S(407)); + r = r() + } else + r = e(); + var K = !rS((CA || o).memoizedState, r); + if (K && (o.memoizedState = r, + _A = !0), + o = o.queue, + Tn(HZ.bind(null, C, o, I), [I]), + o.getSnapshot !== e || K || PA !== null && PA.memoizedState.tag & 1) { + if (C.flags |= 2048, + dE(9, { + destroy: void 0 + }, XZ.bind(null, C, o, r, e), null), + hA === null) + throw Error(S(349)); + Q || (Xi & 127) !== 0 || vZ(C, e, r) + } + return r + } + function vZ(I, e, r) { + I.flags |= 16384, + I = { + getSnapshot: e, + value: r + }, + e = yt.updateQueue, + e === null ? (e = Or(), + yt.updateQueue = e, + e.stores = [I]) : (r = e.stores, + r === null ? e.stores = [I] : r.push(I)) + } + function XZ(I, e, r, C) { + e.value = r, + e.getSnapshot = C, + PZ(e) && _Z(I) + } + function HZ(I, e, r) { + return r(function() { + PZ(e) && _Z(I) + }) + } + function PZ(I) { + var e = I.getSnapshot; + I = I.value; + try { + var r = e(); + return !rS(I, r) + } catch { + return !0 + } + } + function _Z(I) { + var e = Ds(I, 2); + e !== null && aS(e, I, 2) + } + function Mn(I) { + var e = ja(); + if (typeof I == "function") { + var r = I; + if (I = r(), + AI) { + pS(!0); + try { + r() + } finally { + pS(!1) + } + } + } + return e.memoizedState = e.baseState = I, + e.queue = { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: Hi, + lastRenderedState: I + }, + e + } + function $Z(I, e, r, C) { + return I.baseState = r, + Nn(I, CA, typeof C == "function" ? C : Hi) + } + function Gq(I, e, r, C, o) { + if (Xr(I)) + throw Error(S(485)); + if (I = e.action, + I !== null) { + var Q = { + payload: o, + action: I, + next: null, + isTransition: !0, + status: "pending", + value: null, + reason: null, + listeners: [], + then: function(K) { + Q.listeners.push(K) + } + }; + T.T !== null ? r(!0) : Q.isTransition = !1, + C(Q), + r = e.pending, + r === null ? (Q.next = e.pending = Q, + td(e, Q)) : (Q.next = r.next, + e.pending = r.next = Q) + } + } + function td(I, e) { + var r = e.action + , C = e.payload + , o = I.state; + if (e.isTransition) { + var Q = T.T + , K = {}; + T.T = K; + try { + var N = r(o, C) + , F = T.S; + F !== null && F(K, N), + Ad(I, e, N) + } catch (f) { + Bn(I, e, f) + } finally { + Q !== null && K.types !== null && (Q.types = K.types), + T.T = Q + } + } else + try { + Q = r(o, C), + Ad(I, e, Q) + } catch (f) { + Bn(I, e, f) + } + } + function Ad(I, e, r) { + r !== null && typeof r == "object" && typeof r.then == "function" ? r.then(function(C) { + ad(I, e, C) + }, function(C) { + return Bn(I, e, C) + }) : ad(I, e, r) + } + function ad(I, e, r) { + e.status = "fulfilled", + e.value = r, + Sd(e), + I.state = r, + e = I.pending, + e !== null && (r = e.next, + r === e ? I.pending = null : (r = r.next, + e.next = r, + td(I, r))) + } + function Bn(I, e, r) { + var C = I.pending; + if (I.pending = null, + C !== null) { + C = C.next; + do + e.status = "rejected", + e.reason = r, + Sd(e), + e = e.next; + while (e !== C) + } + I.action = null + } + function Sd(I) { + I = I.listeners; + for (var e = 0; e < I.length; e++) + (0, + I[e])() + } + function id(I, e) { + return e + } + function ld(I, e) { + if ($t) { + var r = hA.formState; + if (r !== null) { + t: { + var C = yt; + if ($t) { + if (ZA) { + A: { + for (var o = ZA, Q = jS; o.nodeType !== 8; ) { + if (!Q) { + o = null; + break A + } + if (o = FS(o.nextSibling), + o === null) { + o = null; + break A + } + } + Q = o.data, + o = Q === "F!" || Q === "F" ? o : null + } + if (o) { + ZA = FS(o.nextSibling), + C = o.data === "F!"; + break t + } + } + Yl(C) + } + C = !1 + } + C && (e = r[0]) + } + } + return r = ja(), + r.memoizedState = r.baseState = e, + C = { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: id, + lastRenderedState: e + }, + r.queue = C, + r = dd.bind(null, yt, C), + C.dispatch = r, + C = Mn(!1), + Q = yn.bind(null, yt, !1, C.queue), + C = ja(), + o = { + state: e, + dispatch: null, + action: I, + pending: null + }, + C.queue = o, + r = Gq.bind(null, yt, o, Q, r), + o.dispatch = r, + C.memoizedState = I, + [e, r, !1] + } + function sd(I) { + var e = zA(); + return Id(e, CA, I) + } + function Id(I, e, r) { + if (e = Nn(I, e, id)[0], + I = Dr(Hi)[0], + typeof e == "object" && e !== null && typeof e.then == "function") + try { + var C = ik(e) + } catch (K) { + throw K === hE ? jr : K + } + else + C = e; + e = zA(); + var o = e.queue + , Q = o.dispatch; + return r !== e.memoizedState && (yt.flags |= 2048, + dE(9, { + destroy: void 0 + }, Yq.bind(null, o, r), null)), + [C, Q, I] + } + function Yq(I, e) { + I.action = e + } + function Ed(I) { + var e = zA() + , r = CA; + if (r !== null) + return Id(e, r, I); + zA(), + e = e.memoizedState, + r = zA(); + var C = r.queue.dispatch; + return r.memoizedState = I, + [e, C, !1] + } + function dE(I, e, r, C) { + return I = { + tag: I, + create: r, + deps: C, + inst: e, + next: null + }, + e = yt.updateQueue, + e === null && (e = Or(), + yt.updateQueue = e), + r = e.lastEffect, + r === null ? e.lastEffect = I.next = I : (C = r.next, + r.next = I, + I.next = C, + e.lastEffect = I), + I + } + function ed() { + return zA().memoizedState + } + function fr(I, e, r, C) { + var o = ja(); + yt.flags |= I, + o.memoizedState = dE(1 | e, { + destroy: void 0 + }, r, C === void 0 ? null : C) + } + function vr(I, e, r, C) { + var o = zA(); + C = C === void 0 ? null : C; + var Q = o.memoizedState.inst; + CA !== null && C !== null && gn(C, CA.memoizedState.deps) ? o.memoizedState = dE(e, Q, r, C) : (yt.flags |= I, + o.memoizedState = dE(1 | e, Q, r, C)) + } + function kd(I, e) { + fr(8390656, 8, I, e) + } + function Tn(I, e) { + vr(2048, 8, I, e) + } + function Nq(I) { + yt.flags |= 4; + var e = yt.updateQueue; + if (e === null) + e = Or(), + yt.updateQueue = e, + e.events = [I]; + else { + var r = e.events; + r === null ? e.events = [I] : r.push(I) + } + } + function pd(I) { + var e = zA().memoizedState; + return Nq({ + ref: e, + nextImpl: I + }), + function() { + if ((sA & 2) !== 0) + throw Error(S(440)); + return e.impl.apply(void 0, arguments) + } + } + function rd(I, e) { + return vr(4, 2, I, e) + } + function md(I, e) { + return vr(4, 4, I, e) + } + function Jd(I, e) { + if (typeof e == "function") { + I = I(); + var r = e(I); + return function() { + typeof r == "function" ? r() : e(null) + } + } + if (e != null) + return I = I(), + e.current = I, + function() { + e.current = null + } + } + function Cd(I, e, r) { + r = r != null ? r.concat([I]) : null, + vr(4, 4, Jd.bind(null, e, I), r) + } + function jn() {} + function nd(I, e) { + var r = zA(); + e = e === void 0 ? null : e; + var C = r.memoizedState; + return e !== null && gn(e, C[1]) ? C[0] : (r.memoizedState = [I, e], + I) + } + function bd(I, e) { + var r = zA(); + e = e === void 0 ? null : e; + var C = r.memoizedState; + if (e !== null && gn(e, C[1])) + return C[0]; + if (C = I(), + AI) { + pS(!0); + try { + I() + } finally { + pS(!1) + } + } + return r.memoizedState = [C, e], + C + } + function qn(I, e, r) { + return r === void 0 || (Xi & 1073741824) !== 0 && (Ht & 261930) === 0 ? I.memoizedState = e : (I.memoizedState = r, + I = og(), + yt.lanes |= I, + xl |= I, + r) + } + function od(I, e, r, C) { + return rS(r, e) ? r : RE.current !== null ? (I = qn(I, r, C), + rS(I, e) || (_A = !0), + I) : (Xi & 42) === 0 || (Xi & 1073741824) !== 0 && (Ht & 261930) === 0 ? (_A = !0, + I.memoizedState = r) : (I = og(), + yt.lanes |= I, + xl |= I, + e) + } + function hd(I, e, r, C, o) { + var Q = z.p; + z.p = Q !== 0 && 8 > Q ? Q : 8; + var K = T.T + , N = {}; + T.T = N, + yn(I, !1, e, r); + try { + var F = o() + , f = T.S; + if (f !== null && f(N, F), + F !== null && typeof F == "object" && typeof F.then == "function") { + var it = Wq(F, C); + lk(I, e, it, oS(I)) + } else + lk(I, e, C, oS(I)) + } catch (Et) { + lk(I, e, { + then: function() {}, + status: "rejected", + reason: Et + }, oS()) + } finally { + z.p = Q, + K !== null && N.types !== null && (K.types = N.types), + T.T = K + } + } + function uq() {} + function Fn(I, e, r, C) { + if (I.tag !== 5) + throw Error(S(476)); + var o = Qd(I).queue; + hd(I, o, e, q, r === null ? uq : function() { + return Rd(I), + r(C) + } + ) + } + function Qd(I) { + var e = I.memoizedState; + if (e !== null) + return e; + e = { + memoizedState: q, + baseState: q, + baseQueue: null, + queue: { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: Hi, + lastRenderedState: q + }, + next: null + }; + var r = {}; + return e.next = { + memoizedState: r, + baseState: r, + baseQueue: null, + queue: { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: Hi, + lastRenderedState: r + }, + next: null + }, + I.memoizedState = e, + I = I.alternate, + I !== null && (I.memoizedState = e), + e + } + function Rd(I) { + var e = Qd(I); + e.next === null && (e = I.alternate.memoizedState), + lk(I, e.next.queue, {}, oS()) + } + function xn() { + return Qa(Uk) + } + function Ud() { + return zA().memoizedState + } + function Zd() { + return zA().memoizedState + } + function Mq(I) { + for (var e = I.return; e !== null; ) { + switch (e.tag) { + case 24: + case 3: + var r = oS(); + I = Ml(r); + var C = Bl(e, I, r); + C !== null && (aS(C, e, r), + tk(C, e, r)), + e = { + cache: Jn() + }, + I.payload = e; + return + } + e = e.return + } + } + function Bq(I, e, r) { + var C = oS(); + r = { + lane: C, + revertLane: 0, + gesture: null, + action: r, + hasEagerState: !1, + eagerState: null, + next: null + }, + Xr(I) ? gd(e, r) : (r = an(I, e, r, C), + r !== null && (aS(r, I, C), + Wd(r, e, C))) + } + function dd(I, e, r) { + var C = oS(); + lk(I, e, r, C) + } + function lk(I, e, r, C) { + var o = { + lane: C, + revertLane: 0, + gesture: null, + action: r, + hasEagerState: !1, + eagerState: null, + next: null + }; + if (Xr(I)) + gd(e, o); + else { + var Q = I.alternate; + if (I.lanes === 0 && (Q === null || Q.lanes === 0) && (Q = e.lastRenderedReducer, + Q !== null)) + try { + var K = e.lastRenderedState + , N = Q(K, r); + if (o.hasEagerState = !0, + o.eagerState = N, + rS(N, K)) + return Gr(I, e, o, 0), + hA === null && Kr(), + !1 + } catch {} finally {} + if (r = an(I, e, o, C), + r !== null) + return aS(r, I, C), + Wd(r, e, C), + !0 + } + return !1 + } + function yn(I, e, r, C) { + if (C = { + lane: 2, + revertLane: ob(), + gesture: null, + action: C, + hasEagerState: !1, + eagerState: null, + next: null + }, + Xr(I)) { + if (e) + throw Error(S(479)) + } else + e = an(I, r, C, 2), + e !== null && aS(e, I, 2) + } + function Xr(I) { + var e = I.alternate; + return I === yt || e !== null && e === yt + } + function gd(I, e) { + UE = wr = !0; + var r = I.pending; + r === null ? e.next = e : (e.next = r.next, + r.next = e), + I.pending = e + } + function Wd(I, e, r) { + if ((r & 4194048) !== 0) { + var C = e.lanes; + C &= I.pendingLanes, + r |= C, + e.lanes = r, + va(I, r) + } + } + var sk = { + readContext: Qa, + use: Vr, + useCallback: BA, + useContext: BA, + useEffect: BA, + useImperativeHandle: BA, + useLayoutEffect: BA, + useInsertionEffect: BA, + useMemo: BA, + useReducer: BA, + useRef: BA, + useState: BA, + useDebugValue: BA, + useDeferredValue: BA, + useTransition: BA, + useSyncExternalStore: BA, + useId: BA, + useHostTransitionStatus: BA, + useFormState: BA, + useActionState: BA, + useOptimistic: BA, + useMemoCache: BA, + useCacheRefresh: BA + }; + sk.useEffectEvent = BA; + var cd = { + readContext: Qa, + use: Vr, + useCallback: function(I, e) { + return ja().memoizedState = [I, e === void 0 ? null : e], + I + }, + useContext: Qa, + useEffect: kd, + useImperativeHandle: function(I, e, r) { + r = r != null ? r.concat([I]) : null, + fr(4194308, 4, Jd.bind(null, e, I), r) + }, + useLayoutEffect: function(I, e) { + return fr(4194308, 4, I, e) + }, + useInsertionEffect: function(I, e) { + fr(4, 2, I, e) + }, + useMemo: function(I, e) { + var r = ja(); + e = e === void 0 ? null : e; + var C = I(); + if (AI) { + pS(!0); + try { + I() + } finally { + pS(!1) + } + } + return r.memoizedState = [C, e], + C + }, + useReducer: function(I, e, r) { + var C = ja(); + if (r !== void 0) { + var o = r(e); + if (AI) { + pS(!0); + try { + r(e) + } finally { + pS(!1) + } + } + } else + o = e; + return C.memoizedState = C.baseState = o, + I = { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: I, + lastRenderedState: o + }, + C.queue = I, + I = I.dispatch = Bq.bind(null, yt, I), + [C.memoizedState, I] + }, + useRef: function(I) { + var e = ja(); + return I = { + current: I + }, + e.memoizedState = I + }, + useState: function(I) { + I = Mn(I); + var e = I.queue + , r = dd.bind(null, yt, e); + return e.dispatch = r, + [I.memoizedState, r] + }, + useDebugValue: jn, + useDeferredValue: function(I, e) { + var r = ja(); + return qn(r, I, e) + }, + useTransition: function() { + var I = Mn(!1); + return I = hd.bind(null, yt, I.queue, !0, !1), + ja().memoizedState = I, + [!1, I] + }, + useSyncExternalStore: function(I, e, r) { + var C = yt + , o = ja(); + if ($t) { + if (r === void 0) + throw Error(S(407)); + r = r() + } else { + if (r = e(), + hA === null) + throw Error(S(349)); + (Ht & 127) !== 0 || vZ(C, e, r) + } + o.memoizedState = r; + var Q = { + value: r, + getSnapshot: e + }; + return o.queue = Q, + kd(HZ.bind(null, C, Q, I), [I]), + C.flags |= 2048, + dE(9, { + destroy: void 0 + }, XZ.bind(null, C, Q, r, e), null), + r + }, + useId: function() { + var I = ja() + , e = hA.identifierPrefix; + if ($t) { + var r = Ji + , C = mi; + r = (C & ~(1 << 32 - la(C) - 1)).toString(32) + r, + e = "_" + e + "R_" + r, + r = zr++, + 0 < r && (e += "H" + r.toString(32)), + e += "_" + } else + r = cq++, + e = "_" + e + "r_" + r.toString(32) + "_"; + return I.memoizedState = e + }, + useHostTransitionStatus: xn, + useFormState: ld, + useActionState: ld, + useOptimistic: function(I) { + var e = ja(); + e.memoizedState = e.baseState = I; + var r = { + pending: null, + lanes: 0, + dispatch: null, + lastRenderedReducer: null, + lastRenderedState: null + }; + return e.queue = r, + e = yn.bind(null, yt, !0, r), + r.dispatch = e, + [I, e] + }, + useMemoCache: Yn, + useCacheRefresh: function() { + return ja().memoizedState = Mq.bind(null, yt) + }, + useEffectEvent: function(I) { + var e = ja() + , r = { + impl: I + }; + return e.memoizedState = r, + function() { + if ((sA & 2) !== 0) + throw Error(S(440)); + return r.impl.apply(void 0, arguments) + } + } + } + , Ln = { + readContext: Qa, + use: Vr, + useCallback: nd, + useContext: Qa, + useEffect: Tn, + useImperativeHandle: Cd, + useInsertionEffect: rd, + useLayoutEffect: md, + useMemo: bd, + useReducer: Dr, + useRef: ed, + useState: function() { + return Dr(Hi) + }, + useDebugValue: jn, + useDeferredValue: function(I, e) { + var r = zA(); + return od(r, CA.memoizedState, I, e) + }, + useTransition: function() { + var I = Dr(Hi)[0] + , e = zA().memoizedState; + return [typeof I == "boolean" ? I : ik(I), e] + }, + useSyncExternalStore: fZ, + useId: Ud, + useHostTransitionStatus: xn, + useFormState: sd, + useActionState: sd, + useOptimistic: function(I, e) { + var r = zA(); + return $Z(r, CA, I, e) + }, + useMemoCache: Yn, + useCacheRefresh: Zd + }; + Ln.useEffectEvent = pd; + var Kd = { + readContext: Qa, + use: Vr, + useCallback: nd, + useContext: Qa, + useEffect: Tn, + useImperativeHandle: Cd, + useInsertionEffect: rd, + useLayoutEffect: md, + useMemo: bd, + useReducer: un, + useRef: ed, + useState: function() { + return un(Hi) + }, + useDebugValue: jn, + useDeferredValue: function(I, e) { + var r = zA(); + return CA === null ? qn(r, I, e) : od(r, CA.memoizedState, I, e) + }, + useTransition: function() { + var I = un(Hi)[0] + , e = zA().memoizedState; + return [typeof I == "boolean" ? I : ik(I), e] + }, + useSyncExternalStore: fZ, + useId: Ud, + useHostTransitionStatus: xn, + useFormState: Ed, + useActionState: Ed, + useOptimistic: function(I, e) { + var r = zA(); + return CA !== null ? $Z(r, CA, I, e) : (r.baseState = I, + [I, r.queue.dispatch]) + }, + useMemoCache: Yn, + useCacheRefresh: Zd + }; + Kd.useEffectEvent = pd; + function wn(I, e, r, C) { + e = I.memoizedState, + r = r(C, e), + r = r == null ? e : J({}, e, r), + I.memoizedState = r, + I.lanes === 0 && (I.updateQueue.baseState = r) + } + var zn = { + enqueueSetState: function(I, e, r) { + I = I._reactInternals; + var C = oS() + , o = Ml(C); + o.payload = e, + r != null && (o.callback = r), + e = Bl(I, o, C), + e !== null && (aS(e, I, C), + tk(e, I, C)) + }, + enqueueReplaceState: function(I, e, r) { + I = I._reactInternals; + var C = oS() + , o = Ml(C); + o.tag = 1, + o.payload = e, + r != null && (o.callback = r), + e = Bl(I, o, C), + e !== null && (aS(e, I, C), + tk(e, I, C)) + }, + enqueueForceUpdate: function(I, e) { + I = I._reactInternals; + var r = oS() + , C = Ml(r); + C.tag = 2, + e != null && (C.callback = e), + e = Bl(I, C, r), + e !== null && (aS(e, I, r), + tk(e, I, r)) + } + }; + function Gd(I, e, r, C, o, Q, K) { + return I = I.stateNode, + typeof I.shouldComponentUpdate == "function" ? I.shouldComponentUpdate(C, Q, K) : e.prototype && e.prototype.isPureReactComponent ? !De(r, C) || !De(o, Q) : !0 + } + function Yd(I, e, r, C) { + I = e.state, + typeof e.componentWillReceiveProps == "function" && e.componentWillReceiveProps(r, C), + typeof e.UNSAFE_componentWillReceiveProps == "function" && e.UNSAFE_componentWillReceiveProps(r, C), + e.state !== I && zn.enqueueReplaceState(e, e.state, null) + } + function aI(I, e) { + var r = e; + if ("ref" in e) { + r = {}; + for (var C in e) + C !== "ref" && (r[C] = e[C]) + } + if (I = I.defaultProps) { + r === e && (r = J({}, r)); + for (var o in I) + r[o] === void 0 && (r[o] = I[o]) + } + return r + } + function Nd(I) { + cr(I) + } + function ud(I) { + console.error(I) + } + function Md(I) { + cr(I) + } + function Hr(I, e) { + try { + var r = I.onUncaughtError; + r(e.value, { + componentStack: e.stack + }) + } catch (C) { + setTimeout(function() { + throw C + }) + } + } + function Bd(I, e, r) { + try { + var C = I.onCaughtError; + C(r.value, { + componentStack: r.stack, + errorBoundary: e.tag === 1 ? e.stateNode : null + }) + } catch (o) { + setTimeout(function() { + throw o + }) + } + } + function On(I, e, r) { + return r = Ml(r), + r.tag = 3, + r.payload = { + element: null + }, + r.callback = function() { + Hr(I, e) + } + , + r + } + function Td(I) { + return I = Ml(I), + I.tag = 3, + I + } + function jd(I, e, r, C) { + var o = r.type.getDerivedStateFromError; + if (typeof o == "function") { + var Q = C.value; + I.payload = function() { + return o(Q) + } + , + I.callback = function() { + Bd(e, r, C) + } + } + var K = r.stateNode; + K !== null && typeof K.componentDidCatch == "function" && (I.callback = function() { + Bd(e, r, C), + typeof o != "function" && (yl === null ? yl = new Set([this]) : yl.add(this)); + var N = C.stack; + this.componentDidCatch(C.value, { + componentStack: N !== null ? N : "" + }) + } + ) + } + function Tq(I, e, r, C, o) { + if (r.flags |= 32768, + C !== null && typeof C == "object" && typeof C.then == "function") { + if (e = r.alternate, + e !== null && nE(e, r, o, !0), + r = JS.current, + r !== null) { + switch (r.tag) { + case 31: + case 13: + return qS === null ? Em() : r.alternate === null && TA === 0 && (TA = 3), + r.flags &= -257, + r.flags |= 65536, + r.lanes = o, + C === qr ? r.flags |= 16384 : (e = r.updateQueue, + e === null ? r.updateQueue = new Set([C]) : e.add(C), + Cb(I, C, o)), + !1; + case 22: + return r.flags |= 65536, + C === qr ? r.flags |= 16384 : (e = r.updateQueue, + e === null ? (e = { + transitions: null, + markerInstances: null, + retryQueue: new Set([C]) + }, + r.updateQueue = e) : (r = e.retryQueue, + r === null ? e.retryQueue = new Set([C]) : r.add(C)), + Cb(I, C, o)), + !1 + } + throw Error(S(435, r.tag)) + } + return Cb(I, C, o), + Em(), + !1 + } + if ($t) + return e = JS.current, + e !== null ? ((e.flags & 65536) === 0 && (e.flags |= 256), + e.flags |= 65536, + e.lanes = o, + C !== en && (I = Error(S(422), { + cause: C + }), + Xe(MS(I, r)))) : (C !== en && (e = Error(S(423), { + cause: C + }), + Xe(MS(e, r))), + I = I.current.alternate, + I.flags |= 65536, + o &= -o, + I.lanes |= o, + C = MS(C, r), + o = On(I.stateNode, C, o), + Qn(I, o), + TA !== 4 && (TA = 2)), + !1; + var Q = Error(S(520), { + cause: C + }); + if (Q = MS(Q, r), + Jk === null ? Jk = [Q] : Jk.push(Q), + TA !== 4 && (TA = 2), + e === null) + return !0; + C = MS(C, r), + r = e; + do { + switch (r.tag) { + case 3: + return r.flags |= 65536, + I = o & -o, + r.lanes |= I, + I = On(r.stateNode, C, I), + Qn(r, I), + !1; + case 1: + if (e = r.type, + Q = r.stateNode, + (r.flags & 128) === 0 && (typeof e.getDerivedStateFromError == "function" || Q !== null && typeof Q.componentDidCatch == "function" && (yl === null || !yl.has(Q)))) + return r.flags |= 65536, + o &= -o, + r.lanes |= o, + o = Td(o), + jd(o, I, r, C), + Qn(r, o), + !1 + } + r = r.return + } while (r !== null); + return !1 + } + var Vn = Error(S(461)) + , _A = !1; + function Ra(I, e, r, C) { + e.child = I === null ? yZ(e, null, r, C) : tI(e, I.child, r, C) + } + function qd(I, e, r, C, o) { + r = r.render; + var Q = e.ref; + if ("ref" in C) { + var K = {}; + for (var N in C) + N !== "ref" && (K[N] = C[N]) + } else + K = C; + return Hs(e), + C = Wn(I, e, r, K, Q, o), + N = cn(), + I !== null && !_A ? (Kn(I, e, o), + Pi(I, e, o)) : ($t && N && In(e), + e.flags |= 1, + Ra(I, e, C, o), + e.child) + } + function Fd(I, e, r, C, o) { + if (I === null) { + var Q = r.type; + return typeof Q == "function" && !Sn(Q) && Q.defaultProps === void 0 && r.compare === null ? (e.tag = 15, + e.type = Q, + xd(I, e, Q, C, o)) : (I = Nr(r.type, null, C, e, e.mode, o), + I.ref = e.ref, + I.return = e, + e.child = I) + } + if (Q = I.child, + !$n(I, o)) { + var K = Q.memoizedProps; + if (r = r.compare, + r = r !== null ? r : De, + r(K, C) && I.ref === e.ref) + return Pi(I, e, o) + } + return e.flags |= 1, + I = Vi(Q, C), + I.ref = e.ref, + I.return = e, + e.child = I + } + function xd(I, e, r, C, o) { + if (I !== null) { + var Q = I.memoizedProps; + if (De(Q, C) && I.ref === e.ref) + if (_A = !1, + e.pendingProps = C = Q, + $n(I, o)) + (I.flags & 131072) !== 0 && (_A = !0); + else + return e.lanes = I.lanes, + Pi(I, e, o) + } + return Dn(I, e, r, C, o) + } + function yd(I, e, r, C) { + var o = C.children + , Q = I !== null ? I.memoizedState : null; + if (I === null && e.stateNode === null && (e.stateNode = { + _visibility: 1, + _pendingMarkers: null, + _retryCache: null, + _transitions: null + }), + C.mode === "hidden") { + if ((e.flags & 128) !== 0) { + if (Q = Q !== null ? Q.baseLanes | r : r, + I !== null) { + for (C = e.child = I.child, + o = 0; C !== null; ) + o = o | C.lanes | C.childLanes, + C = C.sibling; + C = o & ~Q + } else + C = 0, + e.child = null; + return Ld(I, e, Q, r, C) + } + if ((r & 536870912) !== 0) + e.memoizedState = { + baseLanes: 0, + cachePool: null + }, + I !== null && Tr(e, Q !== null ? Q.cachePool : null), + Q !== null ? zZ(e, Q) : Un(), + OZ(e); + else + return C = e.lanes = 536870912, + Ld(I, e, Q !== null ? Q.baseLanes | r : r, r, C) + } else + Q !== null ? (Tr(e, Q.cachePool), + zZ(e, Q), + jl(), + e.memoizedState = null) : (I !== null && Tr(e, null), + Un(), + jl()); + return Ra(I, e, o, r), + e.child + } + function Ik(I, e) { + return I !== null && I.tag === 22 || e.stateNode !== null || (e.stateNode = { + _visibility: 1, + _pendingMarkers: null, + _retryCache: null, + _transitions: null + }), + e.sibling + } + function Ld(I, e, r, C, o) { + var Q = nn(); + return Q = Q === null ? null : { + parent: HA._currentValue, + pool: Q + }, + e.memoizedState = { + baseLanes: r, + cachePool: Q + }, + I !== null && Tr(e, null), + Un(), + OZ(e), + I !== null && nE(I, e, C, !0), + e.childLanes = o, + null + } + function Pr(I, e) { + return e = $r({ + mode: e.mode, + children: e.children + }, I.mode), + e.ref = I.ref, + I.child = e, + e.return = I, + e + } + function wd(I, e, r) { + return tI(e, I.child, null, r), + I = Pr(e, e.pendingProps), + I.flags |= 2, + CS(e), + e.memoizedState = null, + I + } + function jq(I, e, r) { + var C = e.pendingProps + , o = (e.flags & 128) !== 0; + if (e.flags &= -129, + I === null) { + if ($t) { + if (C.mode === "hidden") + return I = Pr(e, C), + e.lanes = 536870912, + Ik(null, I); + if (dn(e), + (I = ZA) ? (I = tW(I, jS), + I = I !== null && I.data === "&" ? I : null, + I !== null && (e.memoizedState = { + dehydrated: I, + treeContext: Kl !== null ? { + id: mi, + overflow: Ji + } : null, + retryLane: 536870912, + hydrationErrors: null + }, + r = gZ(I), + r.return = e, + e.child = r, + ha = e, + ZA = null)) : I = null, + I === null) + throw Yl(e); + return e.lanes = 536870912, + null + } + return Pr(e, C) + } + var Q = I.memoizedState; + if (Q !== null) { + var K = Q.dehydrated; + if (dn(e), + o) + if (e.flags & 256) + e.flags &= -257, + e = wd(I, e, r); + else if (e.memoizedState !== null) + e.child = I.child, + e.flags |= 128, + e = null; + else + throw Error(S(558)); + else if (_A || nE(I, e, r, !1), + o = (r & I.childLanes) !== 0, + _A || o) { + if (C = hA, + C !== null && (K = Xa(C, r), + K !== 0 && K !== Q.retryLane)) + throw Q.retryLane = K, + Ds(I, K), + aS(C, I, K), + Vn; + Em(), + e = wd(I, e, r) + } else + I = Q.treeContext, + ZA = FS(K.nextSibling), + ha = e, + $t = !0, + Gl = null, + jS = !1, + I !== null && KZ(e, I), + e = Pr(e, C), + e.flags |= 4096; + return e + } + return I = Vi(I.child, { + mode: C.mode, + children: C.children + }), + I.ref = e.ref, + e.child = I, + I.return = e, + I + } + function _r(I, e) { + var r = e.ref; + if (r === null) + I !== null && I.ref !== null && (e.flags |= 4194816); + else { + if (typeof r != "function" && typeof r != "object") + throw Error(S(284)); + (I === null || I.ref !== r) && (e.flags |= 4194816) + } + } + function Dn(I, e, r, C, o) { + return Hs(e), + r = Wn(I, e, r, C, void 0, o), + C = cn(), + I !== null && !_A ? (Kn(I, e, o), + Pi(I, e, o)) : ($t && C && In(e), + e.flags |= 1, + Ra(I, e, r, o), + e.child) + } + function zd(I, e, r, C, o, Q) { + return Hs(e), + e.updateQueue = null, + r = DZ(e, C, r, o), + VZ(I), + C = cn(), + I !== null && !_A ? (Kn(I, e, Q), + Pi(I, e, Q)) : ($t && C && In(e), + e.flags |= 1, + Ra(I, e, r, Q), + e.child) + } + function Od(I, e, r, C, o) { + if (Hs(e), + e.stateNode === null) { + var Q = rE + , K = r.contextType; + typeof K == "object" && K !== null && (Q = Qa(K)), + Q = new r(C,Q), + e.memoizedState = Q.state !== null && Q.state !== void 0 ? Q.state : null, + Q.updater = zn, + e.stateNode = Q, + Q._reactInternals = e, + Q = e.stateNode, + Q.props = C, + Q.state = e.memoizedState, + Q.refs = {}, + on(e), + K = r.contextType, + Q.context = typeof K == "object" && K !== null ? Qa(K) : rE, + Q.state = e.memoizedState, + K = r.getDerivedStateFromProps, + typeof K == "function" && (wn(e, r, K, C), + Q.state = e.memoizedState), + typeof r.getDerivedStateFromProps == "function" || typeof Q.getSnapshotBeforeUpdate == "function" || typeof Q.UNSAFE_componentWillMount != "function" && typeof Q.componentWillMount != "function" || (K = Q.state, + typeof Q.componentWillMount == "function" && Q.componentWillMount(), + typeof Q.UNSAFE_componentWillMount == "function" && Q.UNSAFE_componentWillMount(), + K !== Q.state && zn.enqueueReplaceState(Q, Q.state, null), + ak(e, C, Q, o), + Ak(), + Q.state = e.memoizedState), + typeof Q.componentDidMount == "function" && (e.flags |= 4194308), + C = !0 + } else if (I === null) { + Q = e.stateNode; + var N = e.memoizedProps + , F = aI(r, N); + Q.props = F; + var f = Q.context + , it = r.contextType; + K = rE, + typeof it == "object" && it !== null && (K = Qa(it)); + var Et = r.getDerivedStateFromProps; + it = typeof Et == "function" || typeof Q.getSnapshotBeforeUpdate == "function", + N = e.pendingProps !== N, + it || typeof Q.UNSAFE_componentWillReceiveProps != "function" && typeof Q.componentWillReceiveProps != "function" || (N || f !== K) && Yd(e, Q, C, K), + ul = !1; + var X = e.memoizedState; + Q.state = X, + ak(e, C, Q, o), + Ak(), + f = e.memoizedState, + N || X !== f || ul ? (typeof Et == "function" && (wn(e, r, Et, C), + f = e.memoizedState), + (F = ul || Gd(e, r, F, C, X, f, K)) ? (it || typeof Q.UNSAFE_componentWillMount != "function" && typeof Q.componentWillMount != "function" || (typeof Q.componentWillMount == "function" && Q.componentWillMount(), + typeof Q.UNSAFE_componentWillMount == "function" && Q.UNSAFE_componentWillMount()), + typeof Q.componentDidMount == "function" && (e.flags |= 4194308)) : (typeof Q.componentDidMount == "function" && (e.flags |= 4194308), + e.memoizedProps = C, + e.memoizedState = f), + Q.props = C, + Q.state = f, + Q.context = K, + C = F) : (typeof Q.componentDidMount == "function" && (e.flags |= 4194308), + C = !1) + } else { + Q = e.stateNode, + hn(I, e), + K = e.memoizedProps, + it = aI(r, K), + Q.props = it, + Et = e.pendingProps, + X = Q.context, + f = r.contextType, + F = rE, + typeof f == "object" && f !== null && (F = Qa(f)), + N = r.getDerivedStateFromProps, + (f = typeof N == "function" || typeof Q.getSnapshotBeforeUpdate == "function") || typeof Q.UNSAFE_componentWillReceiveProps != "function" && typeof Q.componentWillReceiveProps != "function" || (K !== Et || X !== F) && Yd(e, Q, C, F), + ul = !1, + X = e.memoizedState, + Q.state = X, + ak(e, C, Q, o), + Ak(); + var At = e.memoizedState; + K !== Et || X !== At || ul || I !== null && I.dependencies !== null && Mr(I.dependencies) ? (typeof N == "function" && (wn(e, r, N, C), + At = e.memoizedState), + (it = ul || Gd(e, r, it, C, X, At, F) || I !== null && I.dependencies !== null && Mr(I.dependencies)) ? (f || typeof Q.UNSAFE_componentWillUpdate != "function" && typeof Q.componentWillUpdate != "function" || (typeof Q.componentWillUpdate == "function" && Q.componentWillUpdate(C, At, F), + typeof Q.UNSAFE_componentWillUpdate == "function" && Q.UNSAFE_componentWillUpdate(C, At, F)), + typeof Q.componentDidUpdate == "function" && (e.flags |= 4), + typeof Q.getSnapshotBeforeUpdate == "function" && (e.flags |= 1024)) : (typeof Q.componentDidUpdate != "function" || K === I.memoizedProps && X === I.memoizedState || (e.flags |= 4), + typeof Q.getSnapshotBeforeUpdate != "function" || K === I.memoizedProps && X === I.memoizedState || (e.flags |= 1024), + e.memoizedProps = C, + e.memoizedState = At), + Q.props = C, + Q.state = At, + Q.context = F, + C = it) : (typeof Q.componentDidUpdate != "function" || K === I.memoizedProps && X === I.memoizedState || (e.flags |= 4), + typeof Q.getSnapshotBeforeUpdate != "function" || K === I.memoizedProps && X === I.memoizedState || (e.flags |= 1024), + C = !1) + } + return Q = C, + _r(I, e), + C = (e.flags & 128) !== 0, + Q || C ? (Q = e.stateNode, + r = C && typeof r.getDerivedStateFromError != "function" ? null : Q.render(), + e.flags |= 1, + I !== null && C ? (e.child = tI(e, I.child, null, o), + e.child = tI(e, null, r, o)) : Ra(I, e, r, o), + e.memoizedState = Q.state, + I = e.child) : I = Pi(I, e, o), + I + } + function Vd(I, e, r, C) { + return vs(), + e.flags |= 256, + Ra(I, e, r, C), + e.child + } + var fn = { + dehydrated: null, + treeContext: null, + retryLane: 0, + hydrationErrors: null + }; + function vn(I) { + return { + baseLanes: I, + cachePool: BZ() + } + } + function Xn(I, e, r) { + return I = I !== null ? I.childLanes & ~r : 0, + e && (I |= bS), + I + } + function Dd(I, e, r) { + var C = e.pendingProps, o = !1, Q = (e.flags & 128) !== 0, K; + if ((K = Q) || (K = I !== null && I.memoizedState === null ? !1 : (wA.current & 2) !== 0), + K && (o = !0, + e.flags &= -129), + K = (e.flags & 32) !== 0, + e.flags &= -33, + I === null) { + if ($t) { + if (o ? Tl(e) : jl(), + (I = ZA) ? (I = tW(I, jS), + I = I !== null && I.data !== "&" ? I : null, + I !== null && (e.memoizedState = { + dehydrated: I, + treeContext: Kl !== null ? { + id: mi, + overflow: Ji + } : null, + retryLane: 536870912, + hydrationErrors: null + }, + r = gZ(I), + r.return = e, + e.child = r, + ha = e, + ZA = null)) : I = null, + I === null) + throw Yl(e); + return Nb(I) ? e.lanes = 32 : e.lanes = 536870912, + null + } + var N = C.children; + return C = C.fallback, + o ? (jl(), + o = e.mode, + N = $r({ + mode: "hidden", + children: N + }, o), + C = fs(C, o, r, null), + N.return = e, + C.return = e, + N.sibling = C, + e.child = N, + C = e.child, + C.memoizedState = vn(r), + C.childLanes = Xn(I, K, r), + e.memoizedState = fn, + Ik(null, C)) : (Tl(e), + Hn(e, N)) + } + var F = I.memoizedState; + if (F !== null && (N = F.dehydrated, + N !== null)) { + if (Q) + e.flags & 256 ? (Tl(e), + e.flags &= -257, + e = Pn(I, e, r)) : e.memoizedState !== null ? (jl(), + e.child = I.child, + e.flags |= 128, + e = null) : (jl(), + N = C.fallback, + o = e.mode, + C = $r({ + mode: "visible", + children: C.children + }, o), + N = fs(N, o, r, null), + N.flags |= 2, + C.return = e, + N.return = e, + C.sibling = N, + e.child = C, + tI(e, I.child, null, r), + C = e.child, + C.memoizedState = vn(r), + C.childLanes = Xn(I, K, r), + e.memoizedState = fn, + e = Ik(null, C)); + else if (Tl(e), + Nb(N)) { + if (K = N.nextSibling && N.nextSibling.dataset, + K) + var f = K.dgst; + K = f, + C = Error(S(419)), + C.stack = "", + C.digest = K, + Xe({ + value: C, + source: null, + stack: null + }), + e = Pn(I, e, r) + } else if (_A || nE(I, e, r, !1), + K = (r & I.childLanes) !== 0, + _A || K) { + if (K = hA, + K !== null && (C = Xa(K, r), + C !== 0 && C !== F.retryLane)) + throw F.retryLane = C, + Ds(I, C), + aS(K, I, C), + Vn; + Yb(N) || Em(), + e = Pn(I, e, r) + } else + Yb(N) ? (e.flags |= 192, + e.child = I.child, + e = null) : (I = F.treeContext, + ZA = FS(N.nextSibling), + ha = e, + $t = !0, + Gl = null, + jS = !1, + I !== null && KZ(e, I), + e = Hn(e, C.children), + e.flags |= 4096); + return e + } + return o ? (jl(), + N = C.fallback, + o = e.mode, + F = I.child, + f = F.sibling, + C = Vi(F, { + mode: "hidden", + children: C.children + }), + C.subtreeFlags = F.subtreeFlags & 65011712, + f !== null ? N = Vi(f, N) : (N = fs(N, o, r, null), + N.flags |= 2), + N.return = e, + C.return = e, + C.sibling = N, + e.child = C, + Ik(null, C), + C = e.child, + N = I.child.memoizedState, + N === null ? N = vn(r) : (o = N.cachePool, + o !== null ? (F = HA._currentValue, + o = o.parent !== F ? { + parent: F, + pool: F + } : o) : o = BZ(), + N = { + baseLanes: N.baseLanes | r, + cachePool: o + }), + C.memoizedState = N, + C.childLanes = Xn(I, K, r), + e.memoizedState = fn, + Ik(I.child, C)) : (Tl(e), + r = I.child, + I = r.sibling, + r = Vi(r, { + mode: "visible", + children: C.children + }), + r.return = e, + r.sibling = null, + I !== null && (K = e.deletions, + K === null ? (e.deletions = [I], + e.flags |= 16) : K.push(I)), + e.child = r, + e.memoizedState = null, + r) + } + function Hn(I, e) { + return e = $r({ + mode: "visible", + children: e + }, I.mode), + e.return = I, + I.child = e + } + function $r(I, e) { + return I = mS(22, I, null, e), + I.lanes = 0, + I + } + function Pn(I, e, r) { + return tI(e, I.child, null, r), + I = Hn(e, e.pendingProps.children), + I.flags |= 2, + e.memoizedState = null, + I + } + function fd(I, e, r) { + I.lanes |= e; + var C = I.alternate; + C !== null && (C.lanes |= e), + rn(I.return, e, r) + } + function _n(I, e, r, C, o, Q) { + var K = I.memoizedState; + K === null ? I.memoizedState = { + isBackwards: e, + rendering: null, + renderingStartTime: 0, + last: C, + tail: r, + tailMode: o, + treeForkCount: Q + } : (K.isBackwards = e, + K.rendering = null, + K.renderingStartTime = 0, + K.last = C, + K.tail = r, + K.tailMode = o, + K.treeForkCount = Q) + } + function vd(I, e, r) { + var C = e.pendingProps + , o = C.revealOrder + , Q = C.tail; + C = C.children; + var K = wA.current + , N = (K & 2) !== 0; + if (N ? (K = K & 1 | 2, + e.flags |= 128) : K &= 1, + V(wA, K), + Ra(I, e, C, r), + C = $t ? ve : 0, + !N && I !== null && (I.flags & 128) !== 0) + t: for (I = e.child; I !== null; ) { + if (I.tag === 13) + I.memoizedState !== null && fd(I, r, e); + else if (I.tag === 19) + fd(I, r, e); + else if (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 + } + switch (o) { + case "forwards": + for (r = e.child, + o = null; r !== null; ) + I = r.alternate, + I !== null && Lr(I) === null && (o = r), + r = r.sibling; + r = o, + r === null ? (o = e.child, + e.child = null) : (o = r.sibling, + r.sibling = null), + _n(e, !1, o, r, Q, C); + break; + case "backwards": + case "unstable_legacy-backwards": + for (r = null, + o = e.child, + e.child = null; o !== null; ) { + if (I = o.alternate, + I !== null && Lr(I) === null) { + e.child = o; + break + } + I = o.sibling, + o.sibling = r, + r = o, + o = I + } + _n(e, !0, r, null, Q, C); + break; + case "together": + _n(e, !1, null, null, void 0, C); + break; + default: + e.memoizedState = null + } + return e.child + } + function Pi(I, e, r) { + if (I !== null && (e.dependencies = I.dependencies), + xl |= e.lanes, + (r & e.childLanes) === 0) + if (I !== null) { + if (nE(I, e, r, !1), + (r & e.childLanes) === 0) + return null + } else + return null; + if (I !== null && e.child !== I.child) + throw Error(S(153)); + if (e.child !== null) { + for (I = e.child, + r = Vi(I, I.pendingProps), + e.child = r, + r.return = e; I.sibling !== null; ) + I = I.sibling, + r = r.sibling = Vi(I, I.pendingProps), + r.return = e; + r.sibling = null + } + return e.child + } + function $n(I, e) { + return (I.lanes & e) !== 0 ? !0 : (I = I.dependencies, + !!(I !== null && Mr(I))) + } + function qq(I, e, r) { + switch (e.tag) { + case 3: + nt(e, e.stateNode.containerInfo), + Nl(e, HA, I.memoizedState.cache), + vs(); + break; + case 27: + case 5: + qt(e); + break; + case 4: + nt(e, e.stateNode.containerInfo); + break; + case 10: + Nl(e, e.type, e.memoizedProps.value); + break; + case 31: + if (e.memoizedState !== null) + return e.flags |= 128, + dn(e), + null; + break; + case 13: + var C = e.memoizedState; + if (C !== null) + return C.dehydrated !== null ? (Tl(e), + e.flags |= 128, + null) : (r & e.child.childLanes) !== 0 ? Dd(I, e, r) : (Tl(e), + I = Pi(I, e, r), + I !== null ? I.sibling : null); + Tl(e); + break; + case 19: + var o = (I.flags & 128) !== 0; + if (C = (r & e.childLanes) !== 0, + C || (nE(I, e, r, !1), + C = (r & e.childLanes) !== 0), + o) { + if (C) + return vd(I, e, r); + e.flags |= 128 + } + if (o = e.memoizedState, + o !== null && (o.rendering = null, + o.tail = null, + o.lastEffect = null), + V(wA, wA.current), + C) + break; + return null; + case 22: + return e.lanes = 0, + yd(I, e, r, e.pendingProps); + case 24: + Nl(e, HA, I.memoizedState.cache) + } + return Pi(I, e, r) + } + function Xd(I, e, r) { + if (I !== null) + if (I.memoizedProps !== e.pendingProps) + _A = !0; + else { + if (!$n(I, r) && (e.flags & 128) === 0) + return _A = !1, + qq(I, e, r); + _A = (I.flags & 131072) !== 0 + } + else + _A = !1, + $t && (e.flags & 1048576) !== 0 && cZ(e, ve, e.index); + switch (e.lanes = 0, + e.tag) { + case 16: + t: { + var C = e.pendingProps; + if (I = _s(e.elementType), + e.type = I, + typeof I == "function") + Sn(I) ? (C = aI(I, C), + e.tag = 1, + e = Od(null, e, I, C, r)) : (e.tag = 0, + e = Dn(null, e, I, C, r)); + else { + if (I != null) { + var o = I.$$typeof; + if (o === u) { + e.tag = 11, + e = qd(null, e, I, C, r); + break t + } else if (o === G) { + e.tag = 14, + e = Fd(null, e, I, C, r); + break t + } + } + throw e = St(I) || I, + Error(S(306, e, "")) + } + } + return e; + case 0: + return Dn(I, e, e.type, e.pendingProps, r); + case 1: + return C = e.type, + o = aI(C, e.pendingProps), + Od(I, e, C, o, r); + case 3: + t: { + if (nt(e, e.stateNode.containerInfo), + I === null) + throw Error(S(387)); + C = e.pendingProps; + var Q = e.memoizedState; + o = Q.element, + hn(I, e), + ak(e, C, null, r); + var K = e.memoizedState; + if (C = K.cache, + Nl(e, HA, C), + C !== Q.cache && mn(e, [HA], r, !0), + Ak(), + C = K.element, + Q.isDehydrated) + if (Q = { + element: C, + isDehydrated: !1, + cache: K.cache + }, + e.updateQueue.baseState = Q, + e.memoizedState = Q, + e.flags & 256) { + e = Vd(I, e, C, r); + break t + } else if (C !== o) { + o = MS(Error(S(424)), e), + Xe(o), + e = Vd(I, e, C, r); + break t + } else { + switch (I = e.stateNode.containerInfo, + I.nodeType) { + case 9: + I = I.body; + break; + default: + I = I.nodeName === "HTML" ? I.ownerDocument.body : I + } + for (ZA = FS(I.firstChild), + ha = e, + $t = !0, + Gl = null, + jS = !0, + r = yZ(e, null, C, r), + e.child = r; r; ) + r.flags = r.flags & -3 | 4096, + r = r.sibling + } + else { + if (vs(), + C === o) { + e = Pi(I, e, r); + break t + } + Ra(I, e, C, r) + } + e = e.child + } + return e; + case 26: + return _r(I, e), + I === null ? (r = sW(e.type, null, e.pendingProps, null)) ? e.memoizedState = r : $t || (r = e.type, + I = e.pendingProps, + C = Cm(Ct.current).createElement(r), + C[oa] = e, + C[Ha] = I, + Ua(C, r, I), + pa(C), + e.stateNode = C) : e.memoizedState = sW(e.type, I.memoizedProps, e.pendingProps, I.memoizedState), + null; + case 27: + return qt(e), + I === null && $t && (C = e.stateNode = SW(e.type, e.pendingProps, Ct.current), + ha = e, + jS = !0, + o = ZA, + Ol(e.type) ? (ub = o, + ZA = FS(C.firstChild)) : ZA = o), + Ra(I, e, e.pendingProps.children, r), + _r(I, e), + I === null && (e.flags |= 4194304), + e.child; + case 5: + return I === null && $t && ((o = C = ZA) && (C = mF(C, e.type, e.pendingProps, jS), + C !== null ? (e.stateNode = C, + ha = e, + ZA = FS(C.firstChild), + jS = !1, + o = !0) : o = !1), + o || Yl(e)), + qt(e), + o = e.type, + Q = e.pendingProps, + K = I !== null ? I.memoizedProps : null, + C = Q.children, + cb(o, Q) ? C = null : K !== null && cb(o, K) && (e.flags |= 32), + e.memoizedState !== null && (o = Wn(I, e, Kq, null, null, r), + Uk._currentValue = o), + _r(I, e), + Ra(I, e, C, r), + e.child; + case 6: + return I === null && $t && ((I = r = ZA) && (r = JF(r, e.pendingProps, jS), + r !== null ? (e.stateNode = r, + ha = e, + ZA = null, + I = !0) : I = !1), + I || Yl(e)), + null; + case 13: + return Dd(I, e, r); + case 4: + return nt(e, e.stateNode.containerInfo), + C = e.pendingProps, + I === null ? e.child = tI(e, null, C, r) : Ra(I, e, C, r), + e.child; + case 11: + return qd(I, e, e.type, e.pendingProps, r); + case 7: + return Ra(I, e, e.pendingProps, r), + e.child; + case 8: + return Ra(I, e, e.pendingProps.children, r), + e.child; + case 12: + return Ra(I, e, e.pendingProps.children, r), + e.child; + case 10: + return C = e.pendingProps, + Nl(e, e.type, C.value), + Ra(I, e, C.children, r), + e.child; + case 9: + return o = e.type._context, + C = e.pendingProps.children, + Hs(e), + o = Qa(o), + C = C(o), + e.flags |= 1, + Ra(I, e, C, r), + e.child; + case 14: + return Fd(I, e, e.type, e.pendingProps, r); + case 15: + return xd(I, e, e.type, e.pendingProps, r); + case 19: + return vd(I, e, r); + case 31: + return jq(I, e, r); + case 22: + return yd(I, e, r, e.pendingProps); + case 24: + return Hs(e), + C = Qa(HA), + I === null ? (o = nn(), + o === null && (o = hA, + Q = Jn(), + o.pooledCache = Q, + Q.refCount++, + Q !== null && (o.pooledCacheLanes |= r), + o = Q), + e.memoizedState = { + parent: C, + cache: o + }, + on(e), + Nl(e, HA, o)) : ((I.lanes & r) !== 0 && (hn(I, e), + ak(e, null, null, r), + Ak()), + o = I.memoizedState, + Q = e.memoizedState, + o.parent !== C ? (o = { + parent: C, + cache: C + }, + e.memoizedState = o, + e.lanes === 0 && (e.memoizedState = e.updateQueue.baseState = o), + Nl(e, HA, C)) : (C = Q.cache, + Nl(e, HA, C), + C !== o.cache && mn(e, [HA], r, !0))), + Ra(I, e, e.pendingProps.children, r), + e.child; + case 29: + throw e.pendingProps + } + throw Error(S(156, e.tag)) + } + function _i(I) { + I.flags |= 4 + } + function tb(I, e, r, C, o) { + if ((e = (I.mode & 32) !== 0) && (e = !1), + e) { + if (I.flags |= 16777216, + (o & 335544128) === o) + if (I.stateNode.complete) + I.flags |= 8192; + else if (Ug()) + I.flags |= 8192; + else + throw $s = qr, + bn + } else + I.flags &= -16777217 + } + function Hd(I, e) { + if (e.type !== "stylesheet" || (e.state.loading & 4) !== 0) + I.flags &= -16777217; + else if (I.flags |= 16777216, + !pW(e)) + if (Ug()) + I.flags |= 8192; + else + throw $s = qr, + bn + } + function tm(I, e) { + e !== null && (I.flags |= 4), + I.flags & 16384 && (e = I.tag !== 22 ? XA() : 536870912, + I.lanes |= e, + KE |= e) + } + function Ek(I, e) { + if (!$t) + switch (I.tailMode) { + case "hidden": + e = I.tail; + for (var r = null; e !== null; ) + e.alternate !== null && (r = e), + e = e.sibling; + r === null ? I.tail = null : r.sibling = null; + break; + case "collapsed": + r = I.tail; + for (var C = null; r !== null; ) + r.alternate !== null && (C = r), + r = r.sibling; + C === null ? e || I.tail === null ? I.tail = null : I.tail.sibling = null : C.sibling = null + } + } + function dA(I) { + var e = I.alternate !== null && I.alternate.child === I.child + , r = 0 + , C = 0; + if (e) + for (var o = I.child; o !== null; ) + r |= o.lanes | o.childLanes, + C |= o.subtreeFlags & 65011712, + C |= o.flags & 65011712, + o.return = I, + o = o.sibling; + else + for (o = I.child; o !== null; ) + r |= o.lanes | o.childLanes, + C |= o.subtreeFlags, + C |= o.flags, + o.return = I, + o = o.sibling; + return I.subtreeFlags |= C, + I.childLanes = r, + e + } + function Fq(I, e, r) { + var C = e.pendingProps; + switch (En(e), + e.tag) { + case 16: + case 15: + case 0: + case 11: + case 7: + case 8: + case 12: + case 9: + case 14: + return dA(e), + null; + case 1: + return dA(e), + null; + case 3: + return r = e.stateNode, + C = null, + I !== null && (C = I.memoizedState.cache), + e.memoizedState.cache !== C && (e.flags |= 2048), + vi(HA), + Gt(), + r.pendingContext && (r.context = r.pendingContext, + r.pendingContext = null), + (I === null || I.child === null) && (CE(e) ? _i(e) : I === null || I.memoizedState.isDehydrated && (e.flags & 256) === 0 || (e.flags |= 1024, + kn())), + dA(e), + null; + case 26: + var o = e.type + , Q = e.memoizedState; + return I === null ? (_i(e), + Q !== null ? (dA(e), + Hd(e, Q)) : (dA(e), + tb(e, o, null, C, r))) : Q ? Q !== I.memoizedState ? (_i(e), + dA(e), + Hd(e, Q)) : (dA(e), + e.flags &= -16777217) : (I = I.memoizedProps, + I !== C && _i(e), + dA(e), + tb(e, o, I, C, r)), + null; + case 27: + if (zt(e), + r = Ct.current, + o = e.type, + I !== null && e.stateNode != null) + I.memoizedProps !== C && _i(e); + else { + if (!C) { + if (e.stateNode === null) + throw Error(S(166)); + return dA(e), + null + } + I = P.current, + CE(e) ? GZ(e) : (I = SW(o, C, r), + e.stateNode = I, + _i(e)) + } + return dA(e), + null; + case 5: + if (zt(e), + o = e.type, + I !== null && e.stateNode != null) + I.memoizedProps !== C && _i(e); + else { + if (!C) { + if (e.stateNode === null) + throw Error(S(166)); + return dA(e), + null + } + if (Q = P.current, + CE(e)) + GZ(e); + else { + var K = Cm(Ct.current); + switch (Q) { + case 1: + Q = K.createElementNS("http://www.w3.org/2000/svg", o); + break; + case 2: + Q = K.createElementNS("http://www.w3.org/1998/Math/MathML", o); + break; + default: + switch (o) { + case "svg": + Q = K.createElementNS("http://www.w3.org/2000/svg", o); + break; + case "math": + Q = K.createElementNS("http://www.w3.org/1998/Math/MathML", o); + break; + case "script": + Q = K.createElement("div"), + Q.innerHTML = " + + + + diff --git a/index.html b/index.html index cb5146c..d6bda2a 100644 --- a/index.html +++ b/index.html @@ -920,21 +920,6 @@ -
-
-
-
-

PERSÖNLICH FÜR DICH DA

-

Lerne deine Ernährungsberater kennen.

-
-

Hinter einer guten Ernährungsstrategie stehen Menschen, die zuhören und ihre Erfahrung in deinen Alltag und dein Training einbringen.

-
-
-

Beraterprofile werden geladen …

-
-
-
-
@@ -1133,7 +1118,6 @@ type="module" src="/src/components/navigationsbar/navigation.js" > - Buchungen +
+ +
-
- -
-
- -
-
-
-
-
-
-
-

- Wir sind für dich da -

-

- Hast du Fragen zu unseren Angeboten oder - möchtest mehr über Tri-hub erfahren? - Kontaktiere uns – wir freuen uns auf - dich! -

-
-
- Tri-hub Trainer im Stadion -
-
-
-
-
-
-
-
-
- 💬 -
-

- Persönlicher Austausch -

-

- Wir nehmen uns Zeit für deine Fragen und - Anliegen – schnell und unkompliziert. -

-
-
-
- ⚡ -
-

- Schnelle Antworten -

-

- Deine Fragen beantworten wir zeitnah – - per Mail, Telefon oder persönlich. -

-
-
-
- 🤝 -
-

- Echte Beziehung -

-

- Für uns zählt nicht nur die Antwort – - sondern der Mensch hinter der Frage. -

-
-
-
-
-
-
-
-

- Schreib uns eine Nachricht -

-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- - - -
- -
-
-
-
-

- Kontaktinformationen -

-
-
-
-
- - - - -
-
-

- Allgemeine Fragen -

- info@tri-hub.de -
-
-
-
-
-
- - - - -
-
-

- Technische Fragen & - Buchungen -

- support@tri-hub.de -
-
-
-
-
-
- - - -
-
-

- Telefon -

- 06203 / 1764877 -
-
-
-
-
-
- - - - -
-
-

- Adresse -

-
-

- Schloßstr. 11 -

-

- 68535 - Edingen-Neckarhausen -

-
-
-
-
-
-

- Folge uns auf -

- -
-
-
-
-
-
-
-
-

- Unser Standort -

-
-
-

- Karte momentan nicht verfügbar -

-

- Die Adresse ist weiterhin erreichbar. - Bitte öffne Google Maps für die - Routenplanung. -

- In Google Maps öffnen -
-
-
-
-
- - - - - - -
- diff --git a/KontaktJS.js b/KontaktJS.js deleted file mode 100644 index dc244b2..0000000 --- a/KontaktJS.js +++ /dev/null @@ -1,99 +0,0 @@ -document.addEventListener("DOMContentLoaded", () => { - const form = document.querySelector("form"); - - if (!form) { - console.error("Kontaktformular wurde nicht gefunden."); - return; - } - - const nameInput = form.querySelector('input[name="name"]'); - const emailInput = form.querySelector('input[name="email"]'); - const inquiryTypeSelect = form.querySelector('select[name="inquiryType"]'); - const subjectInput = form.querySelector('input[name="subject"]'); - const messageInput = form.querySelector('textarea[name="message"]'); - const submitButton = form.querySelector('button[type="submit"]'); - - const MIN_MESSAGE_LENGTH = 10; - - // Container der Nachricht - const messageContainer = messageInput?.closest("div"); - - // Hinweis "Nachricht ist lang genug" - const messageValidElement = - messageContainer?.querySelector(".message-valid"); - - if ( - !nameInput || - !emailInput || - !inquiryTypeSelect || - !subjectInput || - !messageInput || - !submitButton - ) { - console.error("Ein oder mehrere Formularfelder wurden nicht gefunden."); - return; - } - - function validateForm() { - const name = nameInput.value.trim(); - const email = emailInput.value.trim(); - const inquiryType = inquiryTypeSelect.value.trim(); - const subject = subjectInput.value.trim(); - const message = messageInput.value.trim(); - - // E-Mail-Adresse prüfen - const emailIsValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); - - // Nachricht auf Mindestlänge prüfen - const messageIsLongEnough = message.length >= MIN_MESSAGE_LENGTH; - - // Gesamtes Formular prüfen - const formIsValid = - name.length > 0 && - emailIsValid && - inquiryType.length > 0 && - subject.length > 0 && - messageIsLongEnough; - - // Button aktivieren/deaktivieren - submitButton.disabled = !formIsValid; - - // Nachrichten-Zähler aktualisieren - const messageLabel = messageContainer?.querySelector("label"); - - if (messageLabel) { - messageLabel.textContent = `Nachricht * (${message.length}/${MIN_MESSAGE_LENGTH} Min.)`; - } - - // "Nachricht ist lang genug" anzeigen/verstecken - if (messageValidElement) { - messageValidElement.style.display = messageIsLongEnough - ? "block" - : "none"; - } - } - - // Alle relevanten Felder überwachen - [ - nameInput, - emailInput, - inquiryTypeSelect, - subjectInput, - messageInput, - ].forEach((field) => { - field.addEventListener("input", validateForm); - field.addEventListener("change", validateForm); - }); - - // Formular-Submit zusätzlich absichern - form.addEventListener("submit", (event) => { - validateForm(); - - if (submitButton.disabled) { - event.preventDefault(); - } - }); - - // Initialen Zustand setzen - validateForm(); -}); diff --git a/index.html b/index.html index d6bda2a..265dc95 100644 --- a/index.html +++ b/index.html @@ -1102,6 +1102,90 @@
+ + +
+
+
+
+
KONTAKT AUFNEHMEN
+

+ Schreib uns. +

+
+ +

+ Du hast Fragen oder möchtest einen Termin + vereinbaren? Schreib uns einfach. Wir melden uns + schnellstmöglich bei dir. +

+
+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+
+
+